2009-11-06 44 views

回答

4

不,你必須通過調用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 

只會引發錯誤,但變化會在表格中進行。

+0

那麼,是否存在隱式事務?如果我沒有明確開始一個事務,ROLLBACK TRAN會導致任何問題?謝謝! – Jordan 2009-11-06 18:50:33

+0

是的,有一個隱式事務。更新和觸發器在一個事務中關閉。觸發器總是處於一個使用DML或DDL語句的事務中。如果您執行UPDATE,則必須等到觸發器中的語句完成後再進行更新。 RAISERROR不會回滾事務。 – 2009-11-06 19:23:02

+0

注意到任何回滾語句(沒有列出保存點)將回滾所有現有的打開事務。 [鏈接](http://stackoverflow.com/a/11469663)。 – crokusek 2014-10-09 17:06:51