MSSQL 2005触发器行为

我想知道如何在SQL Server响应一个未提交的事务,如果触发器指定触发AFTER UPDATE的表上的触发器行为。

如果事务没有被提交到表的UPDATE,触发器会触发吗? 还是等待(如我希望的那样)交易在开火前提交?

触发器将在UPDATE之后立即运行,并被视为活动事务的一部分。

考虑触发器更新/清除表中的某些数据的情况 – 如果触发器没有立即触发,您将无法引用这个更正的数据,直到尝试提交事务后。

这是有点你如何希望。 如果事务没有提交,那么AFTER UPDATE触发器将不会触发,但是如果在语句之后检查@@Error的值并回滚事务,那么对整个事务来说只有这样。

考虑一下:

 CREATE TABLE Table1 (SomeNumber int NOT NULL) CREATE TABLE Table2 (SomeNumber int) CREATE TRIGGER UpdAfterTrigger ON Table1 AFTER UPDATE AS BEGIN INSERT Table2 SELECT 1 END INSERT Table1 (SomeNumber) SELECT 1 BEGIN TRANSACTION UPDATE Table1 SET SomeNumber=1 UPDATE Table1 SET SomeNumber=1 UPDATE Table1 SET SomeNumber=1 UPDATE Table1 SET SomeNumber=1 UPDATE Table1 SET SomeNumber=NULL IF (@@error <> 0) BEGIN ROLLBACK TRANSACTION END ELSE BEGIN COMMIT TRANSACTION END 

在这种情况下,触发器不会触发,因为在将NULL插入NOT NULL列时,事务正在回滚,因为发生错误。

如果你没有检查@@Error <> 0 ,只是盲目地提交事务,那么在这个例子中的触发器将为批处理中的4个良好的UPDATE语句中的每一个触发。