次のようなストアド プロシージャがあります。
USE [DBName]
GO
/****** Object: StoredProcedure [dbo].[ProcName] Script Date: 10/03/2012 12:10:16 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[ProcName](@filter bigint, @n int)
AS
DELETE FROM TableName WITH (READPAST, UPDLOCK, ROWLOCK) OUTPUT(DELETED.ColumnName2)
WHERE TableName.ID in (select top (@n) ID from TableName where TableName.ColumnName1 = @filter)
このプロシージャは、ColumnName2 の最初の @n 値を返します (これらの値で表されるレコードはテーブルから削除されます)。私は vb メソッドからこのストアド プロシージャを使用していますが、通常はうまく機能します。ただし、私にはわからない理由で、例外がスローされることがあります。
You can only specify the READPAST lock in the READ COMMITTED or REPEATABLE READ isolation levels.
私の vb メソッドはこのストアド プロシージャを呼び出し、十分な値を取得できない場合は、新しい値を生成してこのストアド プロシージャを呼び出します。これは、十分な値が得られるまで繰り返されます。本質的に、TableName はキューのように機能し、vb メソッドはうまく機能しますが、上記の例外がスローされることがあります。何が原因で、私の問題の解決策は何ですか?
ストアド プロシージャを呼び出すコードのためだけに新しい接続を開始しようとしましたが、例外が再びスローされたため、役に立ちませんでした。次の記事を読んだにもかかわらず、何が解決策になるのかわかりません。
http://www.red-gate.com/messageboard/viewtopic.php?t=13614
ストアド プロシージャを呼び出すときの .NET READPAST ロック エラー
http://support.microsoft.com/kb/981995
よろしくお願いします。
ラホス アルパド。