あなたは言った:
TXN の間、共有読み取りロックが必要なだけです。これは、他のプロセスが TABLOCK と組み合わせて「書き込み」ロックを取得できないことを意味します。また、COUNT も必要ありません。
...
BEGIN TRANSANCTION
SELECT TOP 1 KeyCol FROM TheTable WITH (TABLOCK, HOLDLOCK)
...
なぜ更新ロックが必要だと思いますか?
コメントの後に編集:
- 「排他ロック」とは、「データを使用する 1 つのプロセスのみ」を意味します。
- 「SERIALIZABLE」とは、基本的に、ロック (共有、排他など) をより長く保持することを意味します。
「排他的ロック」を指定することはできませんおよび 他のプロセスが読み取れるようにします。概念は相互に排他的です。 持続したテーブル全体への書き込みを防止したい 共有/読み取りロックで十分です。ここで SERIALIZABLE の出番です。
「ロック モード」 から
そのため:共有ロックは書き込みを許可せず、SERIALIZABLE にすることで持続させることができます