gpt4 book ai didi

sql - TSQL 更新触发器 : joining inserted and deleted

转载 作者:行者123 更新时间:2023-12-04 06:58:32 25 4
gpt4 key购买 nike

我在 SQL Server 2008 中有一个 on update 触发器。如果某些列已被修改,我只需要执行触发器操作。因此,我想检查发生了什么变化。

T-SQL 提供了“if update(columnName)”结构。但是,如果许多行已被更新,而其中只有一个行的特定列值已更改,则“if update()”将必须返回 true。这将使我对比所需的行多得多的行执行触发操作。

因此,我认为我不使用“if update()”,而是加入虚拟删除和插入的表(更新前后的行)并自己比较相关列。但是,我怎样才能加入这两个表?我无法使用表的主键,因为它可能已被更新修改。我唯一能想到的是通过 row_number() 加入,即隐式表排序。但这感觉非常错误,我不知道 SQL Server 是否真的提供任何保证,即插入的行的顺序与删除的行的顺序相同。

最佳答案

使用您的设计(允许更改主键)似乎很难构建一致的逻辑。

说,你有这张表:

id   value
1 2
2 1

并发出此操作:
UPDATE  mytable
SET id = CASE WHEN id = 1 THEN 2 ELSE 1 END,
value = CASE WHEN value = 1 THEN 2 ELSE 1 END

它更新了两条记录,但将表保留为:
id   value
2 1
1 2

,从关系的角度来看,这类似于根本不更改表。

主键的全部意义在于它们永远不会改变。

关于sql - TSQL 更新触发器 : joining inserted and deleted,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2237010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com