更新后将触发器添加到数据库中的所有表

斯图尔特

我目前正在使用此脚本向数据库中的所有表添加触发器:

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进行更新已经不存在了。

Damien_The_Unbeliever

如果您的所有主键都是身份列,那么您可以作弊并使用IDENTITYCOL“列”名称:

create table T (ID int IDENTITY(1,1) not null primary key,Col1 varchar(10) not null,Changed datetime null)
go

create trigger T_T
on T
after insert,update
as
    update t set Changed = GETDATE()
    from inserted i
        inner join
        T t on i.IDENTITYCOL = t.IDENTITYCOL

IDENTITYCOL 实际上是该表中标识列的任何列的自动别名。


实际上,可能首选$ identity:

update t set Changed = GETDATE()
from inserted i
    inner join
    T t on i.$identity = t.$identity

似乎IDENTITYCOL弃用并不是说我实际上可以找到这两个文件的实际文档页面。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

触发器将添加到数据库的新行发送到 postgres 中的另一个数据库?

来自分类Dev

一个sql触发器,对数据库中的所有表进行插入,更新,删除

来自分类Dev

在oracle中插入表B后创建将新行添加到表A中的触发器时出错

来自分类Dev

数据库触发器在子表更新后更新父表上的行

来自分类Dev

我有在表上插入后触发的数据库触发器。

来自分类Dev

触发器函数内所有变量取值后的实时数据库触发器

来自分类Dev

SQL触发器在插入时将新记录添加到具有相同结构的表中

来自分类Dev

更新后在DML触发器中调用对象成员函数(ORACLE数据库)

来自分类Dev

我将一列添加到数据库中的现有表中,然后在刷新实体框架后,数据表(js)停止工作(服务器500错误)

来自分类Dev

WPF,将数据添加到数据库后如何更新/刷新UI

来自分类Dev

将新数据添加到数据库后,更新下拉列表

来自分类Dev

将新数据添加到SQL数据库后如何更新$ scope

来自分类Dev

更新后如何使用触发器将参数中的数据插入表中

来自分类Dev

MYSQL-触发器-更新字段并将数据添加到另一个表

来自分类Dev

将postgreSQL触发器应用于数据库中的现有行

来自分类Dev

如何将MySQL数据库A的表中的行添加到数据库B中的现有表中

来自分类Dev

在Laravel中添加种子后将记录添加到数据库的问题

来自分类Dev

从表触发触发器后如何创建新数据库

来自分类Dev

Spark Cassandra连接器未将所有记录添加到数据库

来自分类Dev

Android将表动态添加到资产文件夹中的现有数据库

来自分类Dev

如何使用laravel将表添加到我现有的数据库中?

来自分类Dev

通过MySQL触发器从数据库表中删除路径后,从文件夹中删除图像

来自分类Dev

将数据库中的数据添加到阵列

来自分类Dev

将表添加到WordPress数据库。有什么问题吗?

来自分类Dev

无法将BOOLEAN列添加到我的Derby数据库中的表中

来自分类Dev

使用数据库优先方法EF将新表添加到现有数据库

来自分类Dev

更新触发器后,将空字符串替换为null会将该列中的所有数据更新为null

来自分类Dev

将列从开发数据库表添加到生产数据库表

来自分类Dev

Oracle触发器是否将旧值和新值添加到审计表?

Related 相关文章

  1. 1

    触发器将添加到数据库的新行发送到 postgres 中的另一个数据库?

  2. 2

    一个sql触发器,对数据库中的所有表进行插入,更新,删除

  3. 3

    在oracle中插入表B后创建将新行添加到表A中的触发器时出错

  4. 4

    数据库触发器在子表更新后更新父表上的行

  5. 5

    我有在表上插入后触发的数据库触发器。

  6. 6

    触发器函数内所有变量取值后的实时数据库触发器

  7. 7

    SQL触发器在插入时将新记录添加到具有相同结构的表中

  8. 8

    更新后在DML触发器中调用对象成员函数(ORACLE数据库)

  9. 9

    我将一列添加到数据库中的现有表中,然后在刷新实体框架后,数据表(js)停止工作(服务器500错误)

  10. 10

    WPF,将数据添加到数据库后如何更新/刷新UI

  11. 11

    将新数据添加到数据库后,更新下拉列表

  12. 12

    将新数据添加到SQL数据库后如何更新$ scope

  13. 13

    更新后如何使用触发器将参数中的数据插入表中

  14. 14

    MYSQL-触发器-更新字段并将数据添加到另一个表

  15. 15

    将postgreSQL触发器应用于数据库中的现有行

  16. 16

    如何将MySQL数据库A的表中的行添加到数据库B中的现有表中

  17. 17

    在Laravel中添加种子后将记录添加到数据库的问题

  18. 18

    从表触发触发器后如何创建新数据库

  19. 19

    Spark Cassandra连接器未将所有记录添加到数据库

  20. 20

    Android将表动态添加到资产文件夹中的现有数据库

  21. 21

    如何使用laravel将表添加到我现有的数据库中?

  22. 22

    通过MySQL触发器从数据库表中删除路径后,从文件夹中删除图像

  23. 23

    将数据库中的数据添加到阵列

  24. 24

    将表添加到WordPress数据库。有什么问题吗?

  25. 25

    无法将BOOLEAN列添加到我的Derby数据库中的表中

  26. 26

    使用数据库优先方法EF将新表添加到现有数据库

  27. 27

    更新触发器后,将空字符串替换为null会将该列中的所有数据更新为null

  28. 28

    将列从开发数据库表添加到生产数据库表

  29. 29

    Oracle触发器是否将旧值和新值添加到审计表?

热门标签

归档