首页 > 解决方案 > 如何在触发器内将 SQL 记录从一个表移动到另一个表

问题描述

我有一个名为“数字”的列的 sql 表(表 A)。在触发器内部(我有一个 AFTER INSERT,UPDATE 触发器)我想将所有具有相同编号的记录移动到不同的表(比如表 B)

因此,如果它是一个插入,我想将所有具有该编号的记录移动到表 B,因此只有新记录存在于原始表(表 A)中。

如果它是一个更新,我想制作一个正在更新到表 B 的记录的副本(使用旧值)。

所以表 B 是一个历史表,其中包含所有以前的记录,表 A 每个数字应该只有一个条目。

放入现有的 AFTER INSERT/UPDATE 会很好,但如果我需要另一个触发器,那很好。

谢谢你的帮助。

标签: sqlsql-serverdatabase-trigger

解决方案


事实证明,这并没有我想象的那么复杂……

(@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。

希望这对某人有帮助!


推荐阅读