sql - 如何在触发器内将 SQL 记录从一个表移动到另一个表
问题描述
我有一个名为“数字”的列的 sql 表(表 A)。在触发器内部(我有一个 AFTER INSERT,UPDATE 触发器)我想将所有具有相同编号的记录移动到不同的表(比如表 B)
因此,如果它是一个插入,我想将所有具有该编号的记录移动到表 B,因此只有新记录存在于原始表(表 A)中。
如果它是一个更新,我想制作一个正在更新到表 B 的记录的副本(使用旧值)。
所以表 B 是一个历史表,其中包含所有以前的记录,表 A 每个数字应该只有一个条目。
放入现有的 AFTER INSERT/UPDATE 会很好,但如果我需要另一个触发器,那很好。
谢谢你的帮助。
解决方案
事实证明,这并没有我想象的那么复杂……
(@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。
希望这对某人有帮助!
推荐阅读
- html - 如何将我的两个按钮定位到中心?
- python-2.x - Web2py 数以千计的数字格式
- python - 如何将具有多种语言的数据框列翻译成英语而不得到:HTTP 错误 429:请求过多
- bash - Bash:无法从管道读取
- javascript - ReactJS 中名称的下拉列表
- c++ - 使用布尔值验证整数输入
- reactjs - 在 JHipster 中使用货币字段
- rust - 在实现返回可变引用的迭代器时,如何解决“无法为 autoref 推断适当的生命周期”?
- python - 如何让我的按钮增加我的迭代值并在网站上显示效果?(django)
- javascript - 如何在 mat-select 的两行中显示数据?