sql >> Database >  >> RDS >> Sqlserver

Een BEFORE DELETE-trigger emuleren in SQL Server 2005

U kunt een INSTEAD OF-trigger gebruiken. Het wordt geactiveerd vóór (vervangt) de daadwerkelijke verwijdering, daarom moet het gekoppelde record in [one_two] nog steeds bestaan.

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

Enkele voorbeeldwaarden

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

Test het nu

delete two where two_id=13



  1. Exporteer mijn analysegegevens en plaats ze in een database

  2. Handmatig de statistische gegevens van tabellen bijwerken in PostgreSQL

  3. Zet de primaire sleutel neer met behulp van een script in de SQL Server-database

  4. OPENDATASOURCE in plaats van gekoppelde server