如何在触发器内将SQL记录从一个表移动到另一个表?

问题描述 投票:0回答:1

我有一个sql表(表A),其中有一列叫做 "Number"。 在一个触发器中(我有一个AFTER INSERT,UPDATE触发器),我想把所有具有相同Number的记录移动到不同的表(比如表B)。

因此,如果是插入,我想把所有有该编号的记录移到表B,这样只有新记录存在于原表(表A)中。

如果是更新,我想把被更新的记录复制到表B(用旧的值)。

所以表B是一个历史表,保存所有以前的记录,表A应该每个Number只有一个条目。

如果能把现有的AFTER INSERTUPDATE放进去就更好了,但如果我需要另一个触发器也可以。

谢谢你的帮助。

sql sql-server database-trigger
1个回答
0
投票

结果发现并没有我想象的那么复杂......

(@itemId set from cursor)

SELECT @tempNumber = [Number] FROM tableA WHERE Id = @itemId;

if (NOT EXISTS(SELECT * FROM deleted)) --is insert
BEGIN
  INSERT INTO tableB SELECT *, GETDATE() AS CreatedDate FROM tableA WHERE Number=@tempNumber AND Id != @itemId
  DELETE FROM tableA WHERE Number=@tempNumber AND Id != @itemId
END

我决定不在更新时创建一个条目,但如果需要你,我相信你只需要做一个ELSE和SELECT从删除,然后INSERT。

希望这能帮助别人

© www.soinside.com 2019 - 2024. All rights reserved.