Sql server 2008 需要锁定辅助

Sql server 2008 需要锁定辅助,sql-server-2008,stored-procedures,locking,Sql Server 2008,Stored Procedures,Locking,我有一个存储过程,它从表中选择TOP 1记录,并用列的值分配一些变量。然后它选择s10条记录,其中Id列的值与TOP 1变量列的值相同 SELECT TOP 1 @Id = [Id] FROM [TableA] ORDER BY [DateCreated], [Priority] SELECT TOP 10 * FROM [TableA] WHERE [Id] = @Id; 其目的是选择一条记录,然后获得10条匹配记录进行处理。如果一个连接正在调用存储过程,则此操作有效。

我有一个存储过程,它从表中选择
TOP 1
记录,并用列的值分配一些变量。然后它选择
s10条记录,其中
Id
列的值与
TOP 1
变量列的值相同

SELECT TOP 1 @Id = [Id]
  FROM [TableA]
 ORDER
    BY [DateCreated], [Priority]

SELECT TOP 10 *
  FROM [TableA]
 WHERE [Id] = @Id;
其目的是
选择一条记录,然后获得10条匹配记录进行处理。如果一个连接正在调用存储过程,则此操作有效。我有一个多线程的应用程序,这会导致一个问题,因为如果第一个和第二个记录是相同的
Id
,我希望它们位于一个结果集中,以便第二个线程将拾取不同的值。这就是我的问题所在。我尝试在第一个
SELECT
语句中使用
HOLDLOCK、UPDLOCK、ROWLOCK
提示,但这会锁定第一条记录,并允许另一个线程拾取我希望在第一个线程中的下一个值。我还在存储过程中启动了一个
事务
,并将
隔离级别
更改为
读取提交的
,但是第二个线程总是在第一个线程能够
选择
Id
匹配的10条记录之前进入并获取下一个值


有人对我该怎么做有什么想法吗?这种方法可行吗?

你的方法似乎很奇怪:从同一张表中选择,不按顺序排列,等等


在没有任何其他信息的情况下,并且假设您希望保留相同的解决方案,那么您就必须使用带有的信号量解决方案。这将通过您的代码序列化访问:第二个进程可能会等待或超时等,具体取决于您如何设置参数

可能会重复应应用于查询的顺序?完整的代码是什么样子的?这张桌子看起来像什么?