Sql-Server

數據庫範圍的觸發器

  • December 13, 2018

我是 DBA 的新手,我正在嘗試創建一個觸發器,只要在數據庫中的每個表中進行插入,該觸發器就會更新一個表中的指定列。

我知道可以實現許多觸發器來解決這個問題,但是在我看來,如果它是在數據庫範圍內啟動的單個觸發器,它會更易於維護。

如果有一個觸發器是可能的,那麼是否還有理由我不應該一個觸發器來管理所有表?

以下是我在逐個表的基礎上實現觸發器的目前方式:

CREATE TRIGGER [dac].[T_UpdateModelTime] ON [dac].[SubSpeciality]
AFTER INSERT
AS

DECLARE @Table_Model_ID int

SELECT @Table_Model_ID = Model_ID FROM SubSpeciality 

UPDATE ModelVersion SET DateLastEdited = GETDATE() WHERE ID = @Table_Model_ID;

GO

額外細節

數據通過儲存過程插入到表中。

更新後的列需要秒內的時間敏感性。

我可以添加一個觸發器,它將為數據庫中每個表上的每個 UPDATE、INSERT 或 DELETE 觸發嗎?

不可以。根據文件,每個 TRIGGER 必須解析為在單個表上更新的列。

您的問題沒有神奇的解決方案,但通常使用幾種通用方法。

  1. 利用儲存過程更新單個表,該表包含所有其他表的最後更新時間的記錄——這需要寫入每個執行 INSERT、UPDATE 或 DELETE 的儲存過程。
  2. 如果您設置一些 SQL 代理作業以定期檢查更新,也可以使用更改數據擷取更改跟踪。Pinal Dave 有一個很好的指南,可以在這裡使用 CDC
  3. 表級 DML 觸發器 - 根據您自己的文章。這可能會產生很大的性能成本,並且可能是一個非常糟糕的主意。

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