私はInsert
、Delete
およびSelect
のみのテーブルを持っています(Update
sはありません)
挿入時、セッションロックが使用されることがあった(WITH (TABLOCKX)
)
単純な順次クエリを開くために、_RecordSet::Open
_コマンドを使用して、テーブルからADO which Select
を使用するプログラムがあります。
お気に入り:
_Select * from t1 where id >= @from_id And >= @to_id`
_
または:
_Select top(10) * from t1 where id >= @id Order by id
_
Id列はIdentity
列です。
クエリを開いているときに、デッドロックが発生することがあります。 (テーブルはInsert
クエリによってロックされ、id列のインデックスはSelect
によってロックされます)
デッドロックを防ごうとしています。
選択クエリを開く必要がありますかWITH(NOLOCK)
?デッドロックを防ぐことができますか?
より良いアイデアは、スナップショット分離を有効にすることです: https://docs.Microsoft.com/en-us/dotnet/framework/data/adonet/sql/snapshot-isolation-in-sql-server
これにより、各トランザクションはデータの独自のスナップショットを取得でき、他のトランザクションをロックまたはブロックしません。