5

以下に示す手順でテーブルを宣言しました。

Declare @resultTable Table
(
  EmpId int,
  EmpStatusId int,
  CreatedDateTime datetime
)

そして私は削除機能を実行します:

Delete From ActualTable
Where Id = (Select EmpId from @resultTable with (nolock) where EmpStatusId = @tempId)

ダーティ データを読み取ってもデッドロックを回避するために、select ステートメントでのロックを回避しようとしています。ただし、「with (nolock)」は使用できません。エラーは言う:

キーワード「with」付近の構文が正しくありません。このステートメントが共通テーブル式または xmlnamespaces 節である場合、前のステートメントはセミコロンで終了する必要があります。

一時テーブルに NOLOCK を適用する方法はありますか?

4

1 に答える 1

10

あなたが正しい質問をしているかどうか疑問に思います:

テーブル変数を所有しているため (注: 一時テーブルではなく、テーブル変数です)、それに対して nolock を発行しても意味がありません。ターゲット テーブル ActualTable に対して nolock を発行するように見えますが、delete HAS はロックを保持する必要があります。限目。

大規模な削除操作を処理する通常の手法は、行範囲のバッチで削除を発行することです。

于 2012-09-28T04:30:02.927 に答える