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_table1ON 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触发器