会計システム(SQL Server 2008 R2 Standard Edition)の大きなテーブル(1億以上の行)のイテレータ(bigint)を使用して新しいデータをクエリするWebサービスを構築しました。SELECTでロックするSELECT
データベースのプロバイダは、コミットされていないトランザクションを読み取って、挿入のためにテーブルをロックアップしないようにしました(更新は行われません)。
最近、ロールバックによるトラブルが発生しました。アカウンティングシステムには、エラーやタイムアウトのためにWebサービスがすでに読み込んでいた行をロールバックしています。
私はコミットされたデータを読んでこれを解決すると思いますが、会計システムのプロバイダはテーブルに挿入をロックすることを心配しているので、私たちには許可しません。
選択は実際に挿入をブロックし、どのようにして解決するのがベストでしょうか?
どうすれば 'with nolock'を使用するのですか? – ChrisBint
これは基本的に私がやっていることです(コミットされていないと読んでいます)。私がしたいことは、挿入ロックを引き起こすことなくコミットされたものを読むことです。 – FredrikR
プロバイダは、コミットされたスナップショットの分離を読み取るようにデータベースを設定する必要があります。https://www.brentozar.com/archive/2013/01/implementing-snapshot-or-read-committed-snapshot-isolation-in-sql-server-ガイド/。これにより、トランザクションをブロックすることなくトランザクションを開始する前の状態でレコードを読み取ることができます。 –