sql >> Database >  >> RDS >> Sqlserver

SQL Trigger kan INSTEAD OF DELETE niet doen, maar is vereist voor ntext, afbeeldingskolommen

U heeft geen toegang tot de velden TEKST, NTEXT of AFBEELDING vanuit INSERTED of DELETED. U kunt ze echter openen vanuit de basistabel door lid te worden met INSERTED. Dit werkt alleen voor INSERT en UPDATE omdat in een DELETE de basisrij niet meer bestaat.

Om te bereiken wat u nodig hebt, kopieert u in een andere trigger de primaire sleutel en de kolommen TEXT, NTEXT en IMAGE naar een zijtabel.

Bijvoorbeeld

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, in uw DELETE-trigger, kunt u DELETED toevoegen aan C1_side om de vorige waarde van de ntext-kolom te lezen. Houd er rekening mee dat u de beginwaarden voor uw bijzettafel moet invullen voor rijen die al bestaan ​​in C1.



  1. MySQL/PHP-uitvoerarray herhaalt de query en toont vervolgens het resultaat, hoe kan ik de query verwijderen?

  2. Wat is een bovenliggende tabel en een onderliggende tabel in Database?

  3. Zijn mysql meerdere invoegingen binnen een atomaire enkele query?

  4. Fout bij het bijwerken van de database na implementatie op de server. Laravel 5