小编Dia*_*ana的帖子

使用UPDLOCK选择top 1,READPAST在整个表上设置独占锁

我在存储过程中使用UPDLOCK和READPAST sql提示以实现一种表队列(我说排序因为我选择前1500而不是前1,我不会删除后面的行选择它们.有关更多详细信息,请参阅"选择顶部n"查询中的返回未锁定行的问题.

我用一个简单的小表做了一些测试,一切似乎都很好 - SP的第二次调用不等待第一次调用结束,只是跳过第一次调用锁定的行,然后返回下一行.在我的真实桌子上,虽然,它有时只能工作......其他时候,第二个呼叫挂起并等待第一个呼叫结束.这是因为第一次调用会锁定整个表,而不仅仅是某些行.

这些是测试表和真实表的SP:

真表:

declare @temp as table (ID int primary key, timestamp datetime)

BEGIN TRANSACTION

insert into @temp
SELECT TOP 1 ID, getdate()
FROM subscription WITH (UPDLOCK, READPAST)
WHERE IsBeingProcessed = 0 

waitfor delay '00:00:10'

UPDATE subscription 
SET IsBeingProcessed = 1
from subscription
inner join @temp t on subscription.id = t.id

COMMIT TRANSACTION

select * from @temp t
inner join subscription s on s.id = t.id
Run Code Online (Sandbox Code Playgroud)

测试表:

declare @temp as table (ID int primary …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server concurrency sql-server-2005

8
推荐指数
1
解决办法
9734
查看次数

在"select top n"查询中返回未锁定的行

我需要一个MsSql数据库表和另外8个(相同的)进程并行访问同一个表 - 进行选择前n个,处理这n行,并更新这些行的列.问题是我只需要选择和处理每一行.这意味着如果一个进程到达数据库并选择了前n行,当第二个进程到来时,它应该找到那些被锁定的行并选择从n到2*n行的行,依此类推......

当你选择它们时,是否有可能锁定某些行,当有人请求锁定的前n行返回下一行,而不是等待锁定的行?看起来像是远射,但......

我想的另一件事 - 可能不那么优雅,但听起来简单而安全,就是在数据库中有一个计数器,用于在该表上进行选择的实例.第一个实例将递增计数器并选择前n个,下一个将增加计数器并从n*(i-1)到n*i选择行,依此类推......

这听起来像是一个好的想法吗?你有什么更好的建议吗?任何想法都非常感谢!

谢谢你的时间.

sql-server select locking rows

6
推荐指数
1
解决办法
6527
查看次数

Visual Studio 2008调试不会因错误而停止

我有一个用Visual Studio 2008(.NET 3.0,C#)编写的简单Windows应用程序.

没有对项目,解决方案或Visual Studion(从我记忆中)做任何改变,发生了一些奇怪的事情:当我调试(或运行)我的应用程序时,当它遇到错误时,Visual Studio不会向我显示任何消息框错误,并没有停止执行.它"看起来"没有发生任何事情......错误后的代码没有被执行,但其他一切继续表现得没有发生任何事情.

可能有什么问题?

c# visual-studio-2008

5
推荐指数
1
解决办法
1809
查看次数