2011-04-23 221 views
2

假设我有一个,而不是删除前的表的触发器。所以我只想知道我是否发出删除然后删除之前触发器会触发吗?而不是删除之前的触发

也告诉我如何从删除数据删除而不是触发器。任何人都可以向我展示示例代码。

回答

2

它引发了而不是的删除。如果你没有实现它,你自己就不会被删除。这些触发器通常用于视图而不是表格。

CREATE TABLE T(
C INT IDENTITY(1,1) PRIMARY KEY, 
D INT) 

INSERT INTO T (D) 
SELECT 1 UNION ALL SELECT 2 

GO 

CREATE TRIGGER tr ON T 
INSTEAD OF DELETE 
AS 
BEGIN 
PRINT 'Do Nothing' 
END 

GO 

DELETE 
FROM T 

SELECT * 
FROM T  /*The 2 rows are still there*/ 

GO   /*Implement the trigger*/ 

ALTER TRIGGER tr ON T 
INSTEAD OF DELETE 
AS 
BEGIN 
DELETE T 
FROM T 
JOIN DELETED D 
ON T.C = D.C 
END 

GO 

DELETE 
FROM T 

SELECT * 
FROM T  /*The 2 rows are now gone*/ 

DROP TABLE T