3

我们可以考虑对同一行进行多次更新的必要性的一个示例:

create table t ( c1 int );
insert into t (c1) values (1);
insert into t (c1) values (2);
insert into t (c1) values (3);

update x1
set x1.c1 = X2.new
from t as x1
inner join
(
    select 1 as c1, 100 as new 
    union sel 1, 101
    union sel 1, 102
) as x2 on x1.c1 = x2.c1

同一行有 3 次潜在更新。连接结果集有 3 次相同的行。这一行是否只访问过一次?最终值是如何计算的?

4

1 回答 1

4

从更新文档

指定 FROM 子句以提供更新操作的条件时要小心。如果 UPDATE 语句包含未指定的 FROM 子句,则该语句的结果是未定义的,即,如果 UPDATE 语句不是确定性的,则每个更新的列出现只有一个值可用。

在这种情况下,结果是不确定的。最好将这些 SQL 语句视为错误。

于 2013-06-24T18:50:12.430 回答