Sie können nicht auf TEXT-, NTEXT- oder IMAGE-Felder von INSERTED oder DELETED zugreifen. Sie können jedoch von der Basistabelle aus darauf zugreifen, indem Sie mit INSERTED verbinden. Dies funktioniert nur bei INSERT und UPDATE, da bei einem DELETE die Basiszeile nicht mehr existiert.
Um das zu erreichen, was Sie brauchen, kopieren Sie in einem anderen Trigger den Primärschlüssel und die Spalten TEXT, NTEXT und IMAGE in eine Nebentabelle.
Zum Beispiel
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
Jetzt können Sie in Ihrem DELETE-Trigger DELETED mit C1_side verknüpfen, um den vorherigen Wert der ntext-Spalte zu lesen. Beachten Sie, dass Sie Anfangswerte für Ihre Nebentabelle für Zeilen eingeben müssen, die bereits in C1 vorhanden sind.