Triggers SQL Server触发器以及插入和删除的表记录

Triggers SQL Server触发器以及插入和删除的表记录,triggers,sql-server-2008-r2,Triggers,Sql Server 2008 R2,运行批处理更新语句(即一次更新多条记录的语句)时,插入的表和删除的表是否包含相同数量的记录,并且记录的顺序是否相同(即插入的位置0处的记录对应删除的位置0处的记录) 还有 我有一个更新声明 UPDATE table SET column = value WHERE id = idvalue 如果最初该列的值为1,并且更新也将该列的值设置为1,则插入的表和删除的表都有一条记录,并且该列被标记为已更改(即使未更改)。这是正常行为吗?表格没有固有的顺序。如果您希望在插入的和删除的之间关联行,那么您确

运行批处理更新语句(即一次更新多条记录的语句)时,插入的表和删除的表是否包含相同数量的记录,并且记录的顺序是否相同(即插入的位置0处的记录对应删除的位置0处的记录)

还有

我有一个更新声明

UPDATE table SET column = value WHERE id = idvalue

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

表格没有固有的顺序。如果您希望在插入的
和删除的
之间关联行,那么您确实需要在表上有一个不可更改的键(例如,由
标识生成的代理)。否则,无法识别哪些行彼此对应1

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



1Indeed,出现了一些优化,
UPDATE
s可以分解为
INSERT
DELETE
s,然后重新组合成
UPDATE
s,实际上“更改”了不同的列-总的来说,表中存在正确的最终行,但是更新了哪些列实际上是在切换。

我所有的表都有一个名为“id”的唯一键。将deleted.id与inserted.id进行比较有意义吗?@Ivan MarkDebono-是的,如果
id
值不可更改,那么通常要做的事情是在
inserted
deleted
之间使用
id
在两侧执行
JOIN