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

Hapus catatan dalam Alih-alih Hapus pemicu

Metode ini harus melakukan trik. Pemicu alih-alih akan melakukan apa pun yang Anda tentukan alih-alih melakukan penghapusan secara otomatis. Ini berarti kunci bahwa Anda melakukan penghapusan secara manual atau catatan tidak akan dihapus. Itu tidak akan berjalan secara rekursif. Itu hanya dapat dilakukan di atas meja tanpa penghapusan kaskade diaktifkan. Pada dasarnya triknya adalah Anda bergabung ke tabel asli di bidang id untuk mendapatkan data dari bidang yang tidak Anda akses di pseudotable yang dihapus.

create table dbo.mytesting (test_id int, sometext text)
go
create table dbo.myaudit (test_id int, sometext text)
go
insert into dbo.mytesting
values (1, 'test')
go

Create Trigger audit_Table_Deletes on dbo.mytesting INSTEAD OF delete  
as 
if @@rowcount = 0 return; 
Insert into dbo.myaudit (test_id, sometext) 
Select d.test_id, t.sometext from deleted d 
join dbo.mytesting t on t.test_id = d.test_id

Delete dbo.mytesting where test_id in (select test_id from deleted)
go

delete dbo.mytesting where test_id = 1
select * from dbo.mytesting
select * from dbo.myaudit 
Go 

drop table dbo.mytesting
drop table dbo.myaudit

Jika Anda dapat mengubah bidang menjadi varchar(max) atau nvarchar(max) itu adalah solusi terbaik. Teks dan ntext tidak digunakan lagi dan harus dihapus sama sekali dari SQL Server di versi berikutnya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gunakan tipe data waktu SQL Server dalam aplikasi C#.NET?

  2. Bagaimana cara membuat batasan unik yang juga memungkinkan nol?

  3. Waktu kueri habis dari aplikasi web tetapi berjalan dengan baik dari studio manajemen

  4. Bagaimana saya bisa melakukan pemicu SEBELUM DIPERBARUI dengan sql server?

  5. Kembalikan Informasi Kolom untuk Prosedur Tersimpan di SQL Server:sp_sproc_columns