1
如果我在Sql Server 2005中的AFTER UPDATE触发器中引发错误,是否会导致引发触发器被触发回滚的更新,即使语句没有在内部执行交易?在触发器后引发错误Sql Server 2005
谢谢。
如果我在Sql Server 2005中的AFTER UPDATE触发器中引发错误,是否会导致引发触发器被触发回滚的更新,即使语句没有在内部执行交易?在触发器后引发错误Sql Server 2005
谢谢。
不,你必须通过调用ROLLBACK TRAN
回滚事务:
CREATE TRIGGER trg_au_table
ON dbo.table
AFTER UPDATE
AS
BEGIN
ROLLBACK TRAN
END
GO
这个例子将防止更新任何记录。
此:
CREATE TRIGGER trg_au_table
ON dbo.table
AFTER UPDATE
AS
BEGIN
RAISERROR('This is a test', 16, 1)
END
GO
只会引发错误,但变化会在表格中进行。
那么,是否存在隐式事务?如果我没有明确开始一个事务,ROLLBACK TRAN会导致任何问题?谢谢! – Jordan 2009-11-06 18:50:33
是的,有一个隐式事务。更新和触发器在一个事务中关闭。触发器总是处于一个使用DML或DDL语句的事务中。如果您执行UPDATE,则必须等到触发器中的语句完成后再进行更新。 RAISERROR不会回滚事务。 – 2009-11-06 19:23:02
注意到任何回滚语句(没有列出保存点)将回滚所有现有的打开事务。 [链接](http://stackoverflow.com/a/11469663)。 – crokusek 2014-10-09 17:06:51