Du kan inte komma åt TEXT-, NTEXT- eller IMAGE-fälten från INFOGADE eller RADERADE. Du kan dock komma åt dem från bastabellen genom att gå med INSERTED. Detta fungerar bara för INSERT och UPDATE eftersom i en DELETE finns basraden inte längre.
För att uppnå det du behöver, i en annan trigger, kopiera primärnyckeln och kolumnerna TEXT, NTEXT och IMAGE till en sidotabell.
Till exempel
create table C1(
accountNo int identity primary key,
someColumn nvarchar(10),
someNtext ntext
)
create table C1_side(
accountNo int primary key,
someNtext ntext
)
create trigger trgC1_IU on C1 AFTER INSERT, UPDATE
as
BEGIN
-- Ensure side row exists
insert C1_side(accountNo, someNtext)
select accountNo from INSERTEd
where not exists (select 1 from C1_side where C1_side.accountNo = inserted.accountNo)
-- Copy NTEXT value to side row
update C1_side
set someNtext = c1.someNtext
from C1_side inner join C1 on C1_side.accountNo = C1.accountNo
inner join INSERTED on INSERTED.accountNo = C1.accountNo
-- Could improve by checking if the column was updated for efficiency
END
Nu, i din DELETE-utlösare, kan du ansluta DELETED till C1_side för att läsa det föregående värdet i ntext-kolumnen. Observera att du måste fylla i initiala värden för din sidotabell, för rader som redan finns i C1.