sql >> Databáze >  >> RDS >> Sqlserver

Spouštěč SQL nelze provést MÍSTO DELETE, ale je vyžadován pro ntext, sloupce obrázků

K polím TEXT, NTEXT nebo IMAGE nemáte přístup z INSERTED nebo DELETED. Můžete k nim však přistupovat ze základní tabulky připojením pomocí INSERTED. Toto funguje pouze pro INSERT a UPDATE, protože v DELETE již základní řádek neexistuje.

Chcete-li dosáhnout toho, co potřebujete, v jiném spouštěči zkopírujte primární klíč a sloupce TEXT, NTEXT a IMAGE do vedlejší tabulky.

Například

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

Nyní můžete v aktivační události DELETE připojit DELETED k C1_side a přečíst si předchozí hodnotu sloupce ntext. Všimněte si, že budete muset vyplnit počáteční hodnoty pro vaši postranní tabulku pro řádky, které již existují v C1.



  1. Seřaďte hodnoty NULL na konec tabulky

  2. Který sloupec pro cizí klíč:id nebo jakýkoli jiný sloupec a proč?

  3. Úplný seznam kolací podporovaných MariaDB

  4. dotaz oracle Zřetězit všechny sloupce pomocí ','