将对 sql server 存储过程的请求排队

发布于 2024-12-17 18:51:14 字数 267 浏览 2 评论 0原文

我正在使用一个存储过程,该过程:

  1. 确定表中 selectedBy 列为 null 的行数

  2. 选择以下之一这些行随机

  3. 更新该行的 selectedBy 列

  4. 将该行返回给客户端

如何防止客户端在他们同时选择的情况下选择同一行?

我尝试了各种表提示和隔离级别,但只是在客户端出现死锁异常。我只希望第二个呼叫等待几分之一秒,直到第一个呼叫完成。

I am working with a stored procedure that:

  1. determines the number of rows in the table where the chosenBy column is null

  2. picks one of these rows at random

  3. updates the chosenBy column of this row

  4. returns the row to the client

How do I prevent clients from choosing the same row in situations where they choose at exactly the same time?

I have tried various table hints and isolation levels but just get deadlock exceptions at the client. I just want the second call to wait for the fraction of a second until the first call is completed.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

请远离我 2024-12-24 18:51:14

避免死锁的一种方法(如问题标题所示)是串行访问该过程。

您可以使用 sp_getapplock 和 <代码>sp_releaseapplock

请参阅SQL Server 2005 中的应用程序锁(或互斥体) 获取一些示例代码。

One way of avoiding deadlocks (as indicated in your question title) would be to serialise access to that procedure.

You can do this with sp_getapplock and sp_releaseapplock

See Application Locks (or Mutexes) in SQL Server 2005 for some example code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文