【问题标题】:How to move SQL records from one table to another inside a trigger如何在触发器内将 SQL 记录从一个表移动到另一个表
【发布时间】:2020-05-22 14:15:52
【问题描述】:

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

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

如果是更新,我想将正在更新的记录复制到表 B(使用旧值)。

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

如果我需要另一个触发器,那很好。

感谢您的帮助。

【问题讨论】:

  • 删除了呢?
  • 必须是触发器吗?或者,您可以在用于表更新的 proc 中完成这项工作。您将在 proc 中提供您的键列,然后您可以在表 A 中的更改之前将所有受影响的记录从表 A 移动到表 B。只是一个想法。
  • 记录永远不会被删除...只会更新或插入

标签: sql sql-server database-trigger


【解决方案1】:

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

(@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 from deleted 然后 INSERT。

希望这对某人有所帮助!

【讨论】:

    猜你喜欢
    • 2011-02-24
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多