【发布时间】:2026-01-17 04:40:01
【问题描述】:
我想知道哪个更有效以及为什么。
if not exists (select 1 from table where ID = 101 and TT = 5)
begin
update table
set TT = 5
where ID = 101;
end;
或
update table
set TT = 5
where ID = 101 and TT <> 5;
假设 ID 上有一个聚集索引(没有更多的表使用默认表创建设置)
【问题讨论】:
-
看起来你可以很容易地测试自己
-
取决于您是否有触发器,因为第二个版本将导致触发器运行。
-
@Charlieface 非常棒
-
通常不会发布实际更新,但如果您使用
SNAPSHOT,那么也会发布实际更新。rowversion也将在第二个版本中得到更新,GENERATED AS列也是如此。 -
@Charlieface 没有触发器,但我不明白顶部的触发器如何不执行触发器。我假设只有当一行被更新时,触发器才会触发???如果没有更新行,底部的是否会执行触发器???
标签: sql-server tsql indexing