我有一个存储过程,SELECT
是表中的TOP 1
记录,并将某些变量与列的值进行赋值。然后SELECT
s 10记录Id
列的值与TOP 1
变量列的值相同。需要锁定协助
SELECT TOP 1 @Id = [Id]
FROM [TableA]
ORDER
BY [DateCreated], [Priority]
SELECT TOP 10 *
FROM [TableA]
WHERE [Id] = @Id;
目的是SELECT
一个记录,然后让10条集的记录进行处理。这适用于如果一个连接正在调用存储过程。我有一个应用程序是多线程的,这会导致一个问题,因为如果第一个和第二个记录是相同的Id
,我希望它们在一个结果集中,以便第二个线程将选择一个不同的结果集值。这是我遇到问题的地方。我试着在第一个SELECT
声明中使用HOLDLOCK, UPDLOCK, ROWLOCK
提示,但是它锁定了第一条记录,并允许另一个线程在第一条线程中获取我想要的下一个值。我也在存储过程中启动了一个TRANSACTION
,并将ISOLATION LEVEL
更改为READ COMMITTED
,但第二个线程总是进入并取得下一个值,然后第一个线程可以匹配Id
匹配的10个记录。
有没有人有任何想法我应该如何去做呢?这种方法可行吗?
可能重复的[SQL Server进程队列争用条件](http://stackoverflow.com/questions/939831/sql -server-process-queue-race-condition) – gbn
什么ORDER BY应该适用于查询?完整的代码是什么样的?桌子是什么样的? – gbn