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