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条记录之前进入并获取下一个值
有人对我该怎么做有什么想法吗?这种方法可行吗?你的方法似乎很奇怪:从同一张表中选择,不按顺序排列,等等
在没有任何其他信息的情况下,并且假设您希望保留相同的解决方案,那么您就必须使用带有的信号量解决方案。这将通过您的代码序列化访问:第二个进程可能会等待或超时等,具体取决于您如何设置参数可能会重复应应用于查询的顺序?完整的代码是什么样子的?这张桌子看起来像什么?