3

同じ行に対する複数の更新の必要性を考慮することができる 1 つの例:

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 回あります。この行は 1 回だけアクセスされていますか? 最終的な値はどのように計算されますか?

4

1 に答える 1

4

UPDATEドキュメントから:

FROM 句を指定して更新操作の条件を指定する場合は注意してください。UPDATE ステートメントに FROM 節が含まれていて、更新される各列オカレンスに対して 1 つの値しか使用できないように指定されていない場合、つまり UPDATE ステートメントが決定論的でない場合、UPDATE ステートメントの結果は未定義です。

この場合、結果は非決定論的です。これらの SQL ステートメントをエラーと見なした方がよいでしょう。

于 2013-06-24T18:50:12.430 に答える