Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да емулирам тригер BEFORE DELETE в SQL Server 2005

Можете да използвате тригер ВМЕСТО. Той се задейства преди (замества) действителното изтриване, следователно свързаният запис в [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. Добавете нова колона на таблица към конкретна редна позиция в Microsoft SQL Server

  2. Вземете списък с таблици със или без ограничение на първичен ключ във всички бази данни от екземпляр на SQL Server - SQL Server / TSQL Урок, част 61

  3. Получаване на всички деца на родител с помощта на MSSQL заявка

  4. Как да премахнете нулеви редове от резултата от sql заявка?

  5. Как да активирате/деактивирате достъпа до данни в SQL Server (пример за T-SQL)