ビューからデータを取り込む大きなテーブルがあります。これは、ビューの実行に時間がかかり、テーブルでデータをすぐに使用できるようにするために簡単に実行できるためです。手続きは毎回実行され、テーブルを更新します。挿入中にテーブルをロックする
TRUNCATE TABLE LargeTable
INSERT INTO LargeTable
SELECT *
FROM viewLargeView
WITH (HOLDLOCK)
誰かが、彼らは切り捨て後に何を受けていないではないだろうレコードを選択しようとすると、私はそう挿入するときに、このテーブルをロックしたいと思います。私が使用しているロックは、テーブルではなくビューをロックするようです。
この問題にアプローチするより良い方法はありますか?
挿入の前にトランザクションを開いて後で閉じるとどうなりますか? –
トランザクションを開くときに、別のユーザーがテーブルから選択できますか? – JBone
参考:TRUNCATEはDDLで、DELETEのようなDMLではなくDELETEを使用することをお勧めします。したがって、より大きな権限が必要です。さらに、これをトランザクション(これはあなたの質問に対する正解です)にラップすると、効果的に同じことを実行します。 – RBarryYoung