sqlserver,触发器做备份表如何插入当前时间?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver,触发器做备份表如何插入当前时间?相关的知识,希望对你有一定的参考价值。

比如我给table1 做触发器,在update的时候把update之前的数据备份到table2上
CREATE TRIGGER trigger_table1
ON table1
FOR UPDATE --一个触发器只建一个触发器类型
AS
insert into table2 select * from deleted

这样就可以了,table1和table2列名一样
现在需要的是,我想在update table1 以后,table2上能够显示出来当时update的操作时间,请问如何做?
能不能具体点,我知道用getdate()但是table2又多了一列

下面的代码的前提是,已经有了保存时间的字段。比如就叫:update_data

CREATE TRIGGER trigger_table1
ON table1
FOR UPDATE
AS
BEGIN
    INSERT INTO table2(xx,xx,xx,update_date)
    SELECT xx,xx,xx,GETDATE() FROM Instered
END

追问

谢谢,你说的很对,我还想知道下,你这个代码是用什么软件敲出来的,很多人用,看着挺好的,橙色字体····

追答

这个橙色字体,是我选择百度代码语言,贴上去后,关键字,自己就换成橙色了。

这个,我还真不知道了。哈哈。

追问

原来这样,我就说sql的问题怎么都是这样~还以为我咕噜寡闻了~

追答

客气。

参考技术A 是的,可以两个表同时增加一列update_date ,然后都取getdate()

完成表中的数据插入后如何触发触发器

【中文标题】完成表中的数据插入后如何触发触发器【英文标题】:How to fire a trigger after finishing data insert in a table 【发布时间】:2011-12-30 07:24:07 【问题描述】:

我有一个table A 我正在向其中插入数据。然后进行一些计算以更新相同的table A

我想触发一个触发器,它在数据插入完成后(插入和更新后)调用Procedure A

我该怎么做?

有没有其他方法可以自动完成...或者我必须在table A中完成数据插入后手动运行Procedure A


更简单地说,我想知道如何在插入几行和一次提交后触发触发器,即不是针对每一行。

【问题讨论】:

为什么更新后触发器对您没有帮助? (不是每个;一个语句触发器) 【参考方案1】:

您可以定义为每行或每条语句触发的触发器(FOR EACH ROW 选项)。

如果我没听错的话,你想在一堆语句之后触发触发器吗?不要以为你可以。即使可以,我也宁愿不做。它们分散了您的程序流程/逻辑,使您以后更难理解您的软件是如何工作的。

问候

【讨论】:

我认为你是对的......我也没有在互联网上找到任何东西......会尝试任何其他选择......无论如何谢谢......【参考方案2】:

如果我正确理解了您的问题,您希望触发器在您完成包含多个插入/更新语句的事务后触发?如果是这种情况,我认为您应该考虑在插入/更新操作完成后立即在程序流程中调用您的Procedure A

换句话说:触发器只有在应该为每一行或每条语句调用时才有用。

【讨论】:

【参考方案3】:

在表格中添加一列:例如“FINAL_ACTION”。在您预期的最终操作之前,请保持此列不变。然后让你的触发器只用这个子句触发:

REFERENCING NEW AS NEWREC OLD AS OLDREC
FOR EACH ROW
WHEN (NEWREC.FINAL_ACTION <> OLDREC.FINAL_ACTION)
DECLARE
     --YOUR DECLARATIONS
BEGIN
     --DO SOMETHING
END;

【讨论】:

以上是关于sqlserver,触发器做备份表如何插入当前时间?的主要内容,如果未能解决你的问题,请参考以下文章

SQLServer之创建DML AFTER INSERT触发器

Sql Server 2005 - 插入更新触发器 - 获取更新,插入行

如何得到SqlServer的自增ID

触发器从活动表中删除旧记录并插入历史表

SQL Server 触发器在插入表之前验证数据

sqlserver2005触发器问题