hogy megkapjam a törlendő sorokat?
Gondolom itt azt akartad irni, hogy
beszurt sorokat.
Csak abban az esetben kell osszekapcsolni az alaptablaval az INSERTED tablat, ha az alaptablat modositani akarod a triggerben.
Legyen pl. a proba tabla:
create table proba (
id int not null primary key,
strid varchar(10) null
)
Az elso triggerben irassuk ki a beszurt id erteket, ehhez nem kell semmifele join:
create trigger pr_strid on proba for insert as
declare @strid varchar(10)
select @strid = convert(varchar(10),i.id)
print @strid
A masodik triggerben irjuk be az id-t a strid mezobe. 1. valtozat:
create trigger gen_strid on proba for insert as
update inserted i set strid = convert(varchar(10),i.id)
Ne ez igy nem fog mukodni, az alabbi uzenetet kapod, mikor a triggert be akarod irni:
The logical tables INSERTED and DELETED cannot be updated. Az INSERTED tabla csak egy logikai tabla (egy cache a memoriaban), ami nem modosithato.
A 2. megoldas mar mukodni fog:
create trigger gen_strid on proba for insert as
update p set strid = convert(varchar(10), i.id)
from proba p inner join inserted i on i.id = p.id
Ahhoz, hogy az alaptablaban megkeresd a beszurt sort, ossze kell kapcsolni az INSERTED-el.
A 3. megoldasban nincs join:
create trigger gen_strid on proba for insert as
update p set strid = convert(varchar(10), p.id)
from proba p where p.id = (select id from inserted)
viszont csak egy soros beszurasra fog mukodni, mivel a WHERE-ben a p.id-t csak egy ertekkel hasonlithatom ossze, tehat a zaroljelben levo SELECT csak egy sort szabad, hogy visszaadjon.
A fentiekbol kovetkezik, hogy triggerek hasznalata eseten mindenkeppen jo ha van elsodleges kulcsa a tablanak.