Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 需要通用更新触发器的帮助吗_Sql_Tsql_Sql Server 2008_Triggers - Fatal编程技术网

Sql 需要通用更新触发器的帮助吗

Sql 需要通用更新触发器的帮助吗,sql,tsql,sql-server-2008,triggers,Sql,Tsql,Sql Server 2008,Triggers,我正在使用SQL Server 2008,我想知道是否有一种方法可以编写一个通用的更新触发器,用于检查正在更新的表是否有一个名为“Last_updated”的字段,如果有,则使用getDate()函数更新该字段 我可以编写一个这样的通用触发器来处理数据库中的所有表吗 谢谢你的时间 您可以在触发器中互操作schema_information.tables视图,并将触发器分配给所有表,但这是一种糟糕的做法。您最好编写一些代码生成器来为每个表执行此操作,而不是使用通用触发器。不,您需要为每个表都使用触

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

我可以编写一个这样的通用触发器来处理数据库中的所有表吗


谢谢你的时间

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

不,您需要为每个表都使用触发器,或者在每次更新中包含
Last\u 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
命令。您必须编辑每个命令并修复
a.pk=i.pk
,使每个表成为正确的列。然后运行所有的命令,然后你就拥有了所有的触发器。在添加新表时,需要添加触发器