我有一个如下所示的存储过程:
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
http://support.microsoft.com/kb/981995
预先感谢您的任何帮助,
拉霍斯阿尔帕德。