首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用一个Server触发器侦听多个表的更新

使用一个Server触发器侦听多个表的更新
EN

Stack Overflow用户
提问于 2016-04-19 15:31:19
回答 2查看 1.8K关注 0票数 0

我有一个带有多个表的2012数据库。

所有表都包含相同的两列:DataRowModified (类型为datetime)和DataRowLastAuthor (类型为nvarchar(MAX))。不,我不能把所有的列放在一个单独的表中,这是一个要求每个表都直接包含这些行。

我为表Events编写了下面的触发器,以便每当行更新时自动更新这两列的值:

代码语言:javascript
复制
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

现在我的问题是,对于我必须使用它的每个表,我是否必须复制(并重命名)这个触发器,还是可以以某种方式编写一个在所有(或指定的一组)表上工作的全局触发器?但是,它必须知道更新发生在哪个表/行中,因为它必须修改它。

如前所述,将自动维护的LastAuthorLastModificationDate列实现为多个表的最简单方法是什么?

EN

Stack Overflow用户

回答已采纳

发布于 2016-04-19 15:53:02

Server中的触发器是总是绑定到单个表-您不能同时将“全局”触发器或触发器附加到多个表。

如果您需要在50个表上设置一个触发器--您需要编写50个触发器,每个表每个触发器一个。没办法绕过这一切。

避免这种情况的唯一方法是更新应用程序数据库层中的列,以便在保存数据行时这些值已经存在。像entity这样的东西允许在多个实体上进行这样的“批量操作”,例如更新最后修改的日期和最后一个用户修改实体。

票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36722970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档