我有一个带有多个表的2012数据库。
所有表都包含相同的两列:DataRowModified (类型为datetime)和DataRowLastAuthor (类型为nvarchar(MAX))。不,我不能把所有的列放在一个单独的表中,这是一个要求每个表都直接包含这些行。
我为表Events编写了下面的触发器,以便每当行更新时自动更新这两列的值:
CREATE TRIGGER [dbo].[Trigger_Events_UpdateMetadata]
ON [dbo].[Events]
FOR UPDATE
AS
BEGIN
UPDATE [dbo].[Events]
SET [DataRowModified] = GETDATE(),
[DataRowLastAuthor] = ORIGINAL_LOGIN()
WHERE [Id] IN (SELECT [Id] FROM INSERTED)
END现在我的问题是,对于我必须使用它的每个表,我是否必须复制(并重命名)这个触发器,还是可以以某种方式编写一个在所有(或指定的一组)表上工作的全局触发器?但是,它必须知道更新发生在哪个表/行中,因为它必须修改它。
如前所述,将自动维护的LastAuthor和LastModificationDate列实现为多个表的最简单方法是什么?
发布于 2016-04-19 15:53:02
Server中的触发器是总是绑定到单个表-您不能同时将“全局”触发器或触发器附加到多个表。
如果您需要在50个表上设置一个触发器--您需要编写50个触发器,每个表每个触发器一个。没办法绕过这一切。
避免这种情况的唯一方法是更新应用程序数据库层中的列,以便在保存数据行时这些值已经存在。像entity这样的东西允许在多个实体上进行这样的“批量操作”,例如更新最后修改的日期和最后一个用户修改实体。
https://stackoverflow.com/questions/36722970
复制相似问题