【问题标题】:Need help with generic update trigger需要有关通用更新触发器的帮助
【发布时间】:2010-12-17 02:37:25
【问题描述】:

我正在使用 SQL Server 2008,想知道是否有办法编写通用更新触发器,检查正在更新的表是否有一个名为“Last_Updated”的字段,如果有,则使用getDate() 函数。

我可以编写一个适用于我数据库中所有表的通用触发器吗?

感谢您的宝贵时间!

【问题讨论】:

    标签: sql tsql sql-server-2008 triggers


    【解决方案1】:

    不,您需要为每个表设置一个触发器,或者在每个 UPDATE 中包含 Last_Updated=GETDATE

    试试这个:

    SELECT 
        'CREATE TRIGGER [tr_u_'+TABLE_SCHEMA+'_'+TABLE_NAME+'] ON ['+TABLE_SCHEMA+'].['+TABLE_NAME+']'
            +'AFTER UPDATE AS '
            +'UPDATE ['+TABLE_SCHEMA+'].['+TABLE_NAME+'] '
            +'    SET Last_Updated=GETDATE() '
            +'    FROM ['+TABLE_SCHEMA+'].['+TABLE_NAME+']  A '
            +'    INNER JOIN INSERTED  i ON a.pk=i.pk '
        FROM INFORMATION_SCHEMA.COLUMNS 
        WHERE COLUMN_NAME='LastChgDate' --'Last_Updated'
    

    此查询将为具有Last_Updated 列的每个表生成一个Create Trigger 命令。您必须编辑每个命令并将每个表的a.pk=i.pk 修复为正确的列。然后运行所有命令,然后您将拥有所有触发器。您需要在添加新表时添加触发器。

    【讨论】:

      【解决方案2】:

      您可以在触发器中查询 schema_information.tables 视图并将触发器分配给所有表,但这是一种丑陋的做事方式。您最好为每个表编写一些代码生成器来执行此操作,而不是使用通用触发器。

      【讨论】:

        猜你喜欢
        • 2016-04-04
        • 1970-01-01
        • 2014-09-20
        • 1970-01-01
        • 2013-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多