0

更新クエリは次のとおりです。

UPDATE  Cust_Site
  SET   Cust_Site.Name= H.Name
FROM    Header H 
INNER JOIN Cust_Site S 
    ON   H.Name <> S.Name
    AND H.ID = S.ID
    AND H.Country = S.Country;

これを実行するたびに、150行に影響します。しかし、COMMIT を使用しても、Cust_Site の行はまったく変更されません。

問題は何ですか?

4

3 に答える 3

3

更新ステートメントの挿入および削除された行を出力して、変更内容を確認してください。

UPDATE  Cust_Site
  SET   Cust_Site.Name= H.Name
OUTPUT deleted.Name, inserted.Name, inserted.*
FROM    Header H 
INNER JOIN Cust_Site S 
    ON H.ID = S.ID
    AND H.Country = S.Country
    AND H.Name <> S.Name

このようにして、クエリが実際に同じ値を更新している可能性を排除できます。

クエリを実行する前に@@Trancount、開いているトランザクションがある場合に備えて実行してください。select同じ DB で検証を実行していることを確認してください。

アップデート:

考えられる問題として、今私に起こったことが1つあります。

  • 両方のテーブルの列が同じ型で宣言されていますか? (つまり、固定長ではなく VARCHAR)

  • どちらのデータにも、UPDAte stmt の名前が異なるように見える先頭/末尾の空白が含まれていませんか? 比較するときにそれらをトリミングできますか?

于 2013-05-22T20:20:08.610 に答える
0

次のように、このクエリを相関サブクエリとして記述しますが、サブクエリが各 cust_site 行に対して複数の行を返す場合、これはエラーで失敗する可能性があります。失敗した場合は、期待した結果が得られない理由の手がかりになる可能性があります。

UPDATE  Cust_Site
   SET  Name = (SELECT H.Name FROM Header H WHERE Name <> S.Name AND ID = S.ID AND Country = S.Country)
  FROM  Cust_Site S;
于 2013-05-22T19:28:22.613 に答える