0
我使用這個腳本目前加入觸發所有數據庫中的表:添加到所有表數據庫
exec sp_MSForEachTable 'CREATE TRIGGER [?_Update] ON ? FOR UPDATE AS
BEGIN SET NOCOUNT ON update ? set ModifiedOn = GETDATE() END'
我需要改變的觸發,使其只更新更改的行等等它必須看起來像這樣:
exec sp_MSForEachTable 'CREATE TRIGGER [?_Update] ON ? FOR UPDATE AS
BEGIN SET NOCOUNT ON update ? set ModifiedOn = GETDATE()
from ? updatedTable inner join inserted i
on i.[the tables primary key] = updatedTable.[the tables primary key]
END'
但我不知道如何讓[表的主鍵]值。由第一腳本創建的觸發器的樣子:
update [dim].[company] set ModifiedOn = GETDATE()
,並假設我能得到第二腳本工作,將創建該觸發器:
update [dim].[company] set ModifiedOn = GETDATE()
from [Dim].[Company] updatedTable
inner join inserted i on i.CompanyKey = updatedTable.CompanyKey
有誰知道如何做到這一點,或者如果它不可能將所需的觸發器添加到數據庫中的所有表的替代方法?
最終目標是要知道記錄何時更改,最好是人類可讀或可以轉換爲人類可讀的記錄。我不知道更新將來自何時何地,因此使用sprocs進行更新已經結束。
使用插入的關鍵字引用正在更改的記錄。 http://technet.microsoft.com/en-us/library/aa214435(v=sql.80).aspx – xQbert
我已經發布了一個答案,如果你所有的PK都是IDENTITY列,那麼這個答案將會起作用。如果不是這樣,那麼它開始變得非常快 - 你需要一個額外的元數據查詢,所以你可能不希望再使用'sp_MSforeachtable',組合PK將會使它更加醜陋。 –