【问题标题】:SQL Server trigger and INSERTED and DELETED table recordsSQL Server 触发器和 INSERTED 和 DELETED 表记录
【发布时间】:2014-04-01 08:36:39
【问题描述】:

在运行批处理 UPDATE 语句(即一次更新多条记录的语句)时,Inserted 和 Deleted 表是否包含相同数量的记录并且是相同顺序的记录(即位于 pos 0 的记录Inserted 对应 Deleted 的 pos 0 的记录?

还有……

我有一个更新声明...

UPDATE table SET column = value WHERE id = idvalue

如果最初该列的值为 1,并且更新设置该列的值也 = 1,则插入和删除的表都有一条记录,并且该列被标记为已更改(即使它没有)。这是正常行为吗?

【问题讨论】:

    标签: triggers sql-server-2008-r2


    【解决方案1】:

    表格没有固有的顺序。如果您希望关联 inserteddeleted 之间的行,您真的会希望在表上有一个不可更改的键(例如,IDENTITY 生成的代理项)。否则,无法识别哪些行相互对应1

    是的,触发触发器和存在行是正常的,即使没有发生实际数据更改。


    1确实,有一些优化可以将UPDATEs 分解为INSERTDELETEs,然后重新组合回UPDATEs,这实际上是“改变" 不同的列 - 总体而言,表中存在正确的最终行,但实际上更新了哪些

    【讨论】:

    • 我所有的表都有一个唯一的键,称为“id”。比较deleted.id 和inserted.id 有意义吗?
    • @Ivan-MarkDebono - 是的,如果 ID 的值不可更改,那么通常的做法是在 inserteddeleted 之间使用 @ 进行 JOIN 987654332@两边。
    猜你喜欢
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多