Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर 2005 में पहले DELETE ट्रिगर का अनुकरण कैसे करें

आप INSTEAD OF ट्रिगर का उपयोग कर सकते हैं। यह वास्तविक हटाने से पहले (प्रतिस्थापित) सक्रिय होता है, इसलिए [one_two] में लिंक किया गया रिकॉर्ड अभी भी मौजूद होना चाहिए।

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

कुछ नमूना मान

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

अब इसका परीक्षण करें

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. समय-आधारित डेटा के लिए विभिन्न दृष्टिकोणों का प्रदर्शन

  2. सभी डुप्लीकेट पंक्तियां दिखाएं

  3. मैं SQL सर्वर 2005 पर निष्पादित sql कथनों की निगरानी कैसे कर सकता हूं?

  4. डेटाबेस से अशक्त दिनांक समय कैसे प्राप्त करें?

  5. डेटा तालिका में सम्मिलित नहीं हो रहा है?