Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL Trigger tidak dapat melakukan BUKAN DELETE tetapi diperlukan untuk ntext, kolom gambar

Anda tidak dapat mengakses bidang TEXT, NTEXT atau IMAGE dari INSERTED atau DELETED. Namun Anda dapat mengaksesnya dari tabel dasar dengan bergabung dengan INSERTED. Ini hanya berfungsi untuk INSERT dan UPDATE karena dalam DELETE baris dasar tidak ada lagi.

Untuk mencapai apa yang Anda butuhkan, di pemicu lain, salin kunci utama dan kolom TEXT, NTEXT, dan IMAGE ke tabel samping.

Misalnya

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

Sekarang, di pemicu DELETE Anda, Anda dapat menggabungkan DELETED ke C1_side untuk membaca nilai kolom ntext sebelumnya. Perhatikan bahwa Anda harus mengisi nilai awal untuk tabel samping Anda, untuk baris yang sudah ada di 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. Storm Sempurna untuk Meningkatkan ke Versi Modern SQL Server

  2. Pencadangan SQL Server 2017 -3

  3. Menyinkronkan data antara dua database yang berbeda

  4. SQL Server - Transaksi bersarang dalam prosedur tersimpan

  5. Kesalahan SQL Server 213:Nama kolom atau jumlah nilai yang diberikan tidak sesuai dengan definisi tabel.