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

Cara meniru pemicu SEBELUM DELETE di SQL Server 2005

Anda dapat menggunakan pemicu BUKAN. Itu menyala sebelum (menggantikan) penghapusan yang sebenarnya, oleh karena itu catatan yang ditautkan di [one_two] harus tetap ada.

create table [one] (one_id int not null primary key)
create table [two] (two_id int not null primary key)
create table [one_two] (one_id int, two_id int references two(two_id) on delete cascade)
GO
CREATE trigger t_del_two
on two
instead of delete
as
begin
SET NOCOUNT ON
DECLARE @Statement NVARCHAR(max)
SET @Statement = ''
SELECT @Statement = @Statement + N'EXEC [MyProc] ''' + CAST([one_two].[one_id] AS VARCHAR(36)) + '''; '
FROM deleted
JOIN [one_two] ON deleted.[two_id] = [one_two].[two_id]

PRINT (@Statement)
--EXEC (@Statement)

-- carry out the actual delete
DELETE TWO WHERE two_id in (SELECT two_id from deleted)
end
GO

Beberapa nilai sampel

insert into one select 1
insert into one select 2
insert into one select 3
insert into two select 11
insert into two select 12
insert into two select 13
insert into one_two select 1,11
insert into one_two select 1,13
insert into one_two select 2,13

Sekarang ujilah

delete two where two_id=13



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengonversi waktu tanggal apa pun dari waktu server ke waktu pengguna (berurusan dengan waktu standar dan siang hari)

  2. Sql Query melempar kesalahan

  3. Daftar Fungsi Tanggal dan Waktu di SQL Server (T-SQL)

  4. Cara Menggunakan Perancang Kueri di SQL Server

  5. Pencarian metadata SQL Server 2005 untuk mendapatkan parameter prosedur tersimpan