Sql-Server

我可以在我的 DDL 觸發器中收到回滾通知嗎?

  • February 19, 2012

我希望 SQL Server 中的 DDL 更改觸發外部程序(SQL 之外)。問題是,有沒有辦法通過我的觸發器通知我發生了回滾?

例如,使用以下內容:

BEGIN TRAN

CREATE TABLE [dbo].[TestRollbackTable](
   col1 varchar(100) NOT NULL)

ROLLBACK 

將呼叫 CREATE_TABLE 上的 DDL 觸發器,但似乎沒有使用 ROLLBACK 呼叫任何內容。而且由於我的觸發器正在呼叫外部程序,因此它不會自動進行回滾。我怎樣才能捕捉到 ROLLBACK 否定了該動作的事實?

不要使用 DDL 觸發器。請改用事件通知。事件通知傳遞與 DDL 觸發器完全相同的數據並發生在完全相同的事件上,但它們是非同步的且鬆散耦合的。只有在原始 DDL送出後您才會收到通知。如果 DDL 回滾,您不會收到任何通知。這似乎正是您所需要的。

您無法收到回滾通知。

想想如果可以的話:例如,您可以在執行回滾期間創建一個新表。回滾完成後新表會出現還是也會被回滾?如果您的通知常式導致另一個回滾怎麼辦?現在你有嵌套的回滾。

我認為這些難題是 SQL Server 人員選擇不提供該功能的原因。

引用自:https://dba.stackexchange.com/questions/13422