3
UPDATE table1
SET col = 1
WHERE col2 = 'xyz'


UPDATE a
SET col = 1
FROM table1 a
WHERE col2 = 'xyz'

どちらが好ましいですか?

私が見つけた1つの違いは、2番目のステートメントでは「FROM」ステートメントの近くでWITHNOLOCKを使用できることです。ただし、updateステートメントの近くで使用すると、最初のステートメントと同じエラーメッセージが表示されます。

NOLOCKおよびREADUNCOMMITTEDロック・ヒントは、INSERT、UPDATE、またはDELETEステートメントのターゲット表には使用できません。

本当にありがとう

4

4 に答える 4

3

必要に応じて、またはエイリアス(例のように)または次のようなJOINを使用することに自信がある場合は、FROM構文を使用できます。

UPDATE a
SET col = 1
FROM table1 a
INNER JOIN table2 b ON b.id = a.bid
WHERE b.col = 'x'
于 2012-04-04T08:20:06.467 に答える
3

それらは同じです。

UPDATE ステートメントに 1 つのテーブルへのアクセスのみが含まれる場合、最初のステートメントはクリーンでシンプルです。

たとえばJOINを行う必要がある場合、2番目の例ごとにエイリアスを割り当てると、次のように(IMO)よりクリーンになります。

UPDATE a
SET a.Col = 1
FROM TableA a
    JOIN TableB b ON a.Id = b.Id
WHERE b.Something = '123'

ところで、更新中のテーブルに NOLOCK ヒントを指定しても意味がないので、それを理由として数えないでください。

于 2012-04-04T08:21:21.423 に答える
2

方法2を使用する一般的なシナリオの1つは、結合されたテーブルのフィルターに基づいて更新する必要がある場合です。

UPDATE a
SET a.col = 1
FROM table1 a inner join table2 b on a.someFK = b.somePK
WHERE a.col2 = 'xyz' and b.col3 = 'abc'
于 2012-04-04T08:20:24.220 に答える
1

どちらも良いですが、必要なものによって異なります。

最初の例はより単純ですが、他のテーブルの値を使用することはできません。

例 2 は、Mulmoth が示すように、他のテーブルの値を使用してテーブルを更新できるようにする必要がある場合に非常に役立ちます。

于 2012-04-04T08:24:13.017 に答える