Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách mô phỏng trình kích hoạt TRƯỚC KHI XÓA trong SQL Server 2005

Bạn có thể sử dụng trình kích hoạt INSTEAD OF. Nó kích hoạt trước (thay thế) lần xóa thực sự, do đó, bản ghi được liên kết trong [one_two] vẫn phải tồn tại.

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

Một số giá trị mẫu

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

Bây giờ hãy kiểm tra nó

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. Định cấu hình SQL-SERVER mà không chạy dịch vụ

  2. Cạm bẫy của việc chèn hàng triệu bản ghi vào SQL Server từ tệp phẳng là gì?

  3. Cập nhật thông số báo cáo dựa trên lựa chọn thông số? (SSRS)

  4. So sánh giá sản phẩm theo sql

  5. SQL động với vòng lặp trên tất cả các cột trong một bảng