sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Trigger kan ikke gøre I STEDET FOR SLET, men er påkrævet for ntext, billedkolonner

Du kan ikke få adgang til felterne TEXT, NTEXT eller IMAGE fra INSERTED eller DELETED. Du kan dog få adgang til dem fra basistabellen ved at slutte sig til INSERTED. Dette virker kun for INSERT og UPDATE, fordi basisrækken ikke længere eksisterer i en DELETE.

For at opnå det, du har brug for, skal du i en anden trigger kopiere den primære nøgle og kolonnerne TEXT, NTEXT og IMAGE til en sidetabel.

For eksempel

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-trigger, kan du tilslutte DELETED til C1_side for at læse den forrige værdi af ntext-kolonnen. Bemærk, at du bliver nødt til at udfylde startværdier for din sidetabel for rækker, der allerede findes i C1.



  1. Se indholdet af databasefilen i Android Studio

  2. MySQL INTERVAL Min

  3. Hvordan sikrer man sig, at der ikke er nogen racetilstand i MySQL-databasen, når man øger et felt?

  4. Hvor kan jeg downloade eksempler på Mysql-database?