好的,也許我有點不公平,把這部分留作前面問題的「練習題」。
這將適用於具有單列PK的表格。從這些開始可能是最簡單的,然後返回並用複合PK手動調整它們。
select 'create trigger updated_'+s.name + '_' + t.name + ' on ' + quotename(s.name) + '.' + quotename(t.name)
+ ' after update as'
+ ' begin '
+ ' set nocount on; '
+ ' update t'
+ ' set [DateModified] = getdate()'
+ ' from inserted i'
+ ' inner join ' + quotename(s.name) + '.' + quotename(t.name) + ' t'
+ ' on i.' + quotename(c2.name) + ' = t.' + quotename(c2.name)
+ ' end'
from sys.columns c
inner join sys.tables t
on c.object_id = t.object_id
inner join sys.schemas s
on t.schema_id = s.schema_id
inner join sys.indexes i
on t.object_id = i.object_id
inner join sys.index_columns ic
on i.object_id = ic.object_id
and i.index_id = ic.index_id
inner join sys.columns c2
on ic.object_id = c2.object_id
and ic.index_id = c2.column_id
where c.name = 'DateModified'
and t.type = 'U'
and i.is_primary_key = 1
Y如果PK有多個列,我們的觸發器將不起作用。您可以使用EXISTS()而不是IN()。 – 2010-09-27 19:10:31
您可以使用'INFORMATION_SCHEMA.TABLE_CONSTRAINTS'視圖和'INFORMATION_SCHEMA.KEY_COLUMN_USAGE'視圖獲取PK列 – 2010-09-27 19:19:19