Sql-Server
我可以在我的 DDL 觸發器中收到回滾通知嗎?
我希望 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 人員選擇不提供該功能的原因。