需要有关通用更新触发的帮助

时间:2010-12-16 17:54:57

标签: sql tsql sql-server-2008 triggers

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

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

谢谢你的时间!

2 个答案:

答案 0 :(得分:2)

不,您需要为每个表设置一个触发器,或者在每个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'

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

答案 1 :(得分:1)

您可以在触发器中插入schema_information.tables视图并将触发器设置为所有表,但这是一种丑陋的处理方式。你最好为每个表编写一些代码生成器,而不是使用通用触发器。