sql >> Databáze >  >> RDS >> Sqlserver

Jak emulovat aktivační událost BEFORE DELETE v SQL Server 2005

MÍSTO spouště můžete použít spoušť. Spustí se před (nahrazuje) skutečným odstraněním, proto musí propojený záznam v [one_two] stále existovat.

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

Některé ukázkové hodnoty

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

Nyní to otestujte

delete two where two_id=13



  1. Podmínky NULL v SQL Server

  2. MySQL - najít rozdíl mezi řádky stejné tabulky

  3. Připojení se nezdařilo:Přístup odepřen uživateli 'root'@'localhost' (pomocí hesla:YES) z funkce php

  4. Jak obnovit data z zkrácené tabulky