Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Trigger не може да прави ВМЕСТО ИЗТРИВАНЕ, но е необходим за ntext, графични колони

Нямате достъп до полетата TEXT, NTEXT или IMAGE от INSERTED или DELETED. Въпреки това можете да получите достъп до тях от основната таблица, като се присъедините с INSERTED. Това работи само за INSERT и UPDATE, защото в DELETE основният ред вече не съществува.

За да постигнете това, от което се нуждаете, в друг тригер копирайте първичния ключ и колоните TEXT, NTEXT и IMAGE в странична таблица.

Например

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

Сега във вашия тригер DELETE можете да присъедините DELETED към C1_side, за да прочетете предишната стойност на колоната ntext. Обърнете внимание, че ще трябва да попълните начални стойности за вашата странична таблица за редове, които вече съществуват в C1.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вземете подниз в SQL Server

  2. SQL CASE изявление:Какво е това и кои са най-добрите начини да го използвате?

  3. Актуализиране на пощенски акаунт в база данни в SQL Server (T-SQL)

  4. Как да инсталирате SQL Server на M1 Mac (ARM64)

  5. SQRT() Примери в SQL Server