私はすべてがNOLOCKを内部で使用するCTEを持っています。しかし、子CTEを使用している親CTE内のそれらのCTEから、既にNOLOCKされていると仮定してNOLOCKを使用しないことを選択する。最後の選択でもNOLOCKは使用されません。そのようなSQL Server 2008:CTEでNOLOCKはどのように機能しますか?
何か:
with cte1 as
(select * from tab1 (nolock)),
cte2 as
(select * from cte1)
select * from cte2
または私はあなたがtab1
に共有ロックを取って回避するために、外側のnolock
を必要としない
with cte1 as
(select * from tab1 (nolock)),
cte2 as
(select * from cte1 (nolock))
select * from cte2 (nolock)
おかげ
私はすべて* 'や' NOLOCK'をSELECT '使用することはありません。 CTEがSQL 2005以上でサポートされていることを確認すると、NOLOCKよりもコミットされたが履歴データを確実に読み取るためのより良い方法があります。 –
私は長時間実行しているレポートがテーブルをロックしないようにしたいのですが、私の他のオプションは何ですか? –