SQL Server,使用表作为队列

标签 sql sql-server sql-server-2008 queue

我使用 SQL Server 2008 R2 作为排队机制。我将项目添加到表中,然后外部服务读取并处理这些项目。这很好用,但缺少一件事 - 我需要一种机制,可以尝试从表中选择一行,如果没有,则阻塞直到有(最好是在特定的时间段内)。

任何人都可以建议我如何实现这一目标吗?

最佳答案

实现非池化阻塞出队的唯一方法是 WAITFOR (RECEIVE) 。这意味着 Service Broker 队列,以及所有增加的开销。

如果您使用普通tables as queues您将无法实现非轮询阻塞。您必须通过请求出列操作来轮询队列,如果它没有返回任何内容,请休眠并稍后重试。

恐怕我会不同意安多马尔的观点:虽然他的回答是一个通用问题“表中有行吗?”当涉及到排队时,由于重叠入队/出队的繁忙性质,检查这样的行在负载下(几乎)肯定会出现死锁。当谈到使用表作为队列时,必须始终坚持基本的入队/出队操作,不要尝试花哨的东西。

关于SQL Server,使用表作为队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4686726/

相关文章:

mysql - SQL 在具有限制的选择查询后删除行

java - 初始化变量错误Java

sql - 查找多父层次结构的深度 - SQL

sql-server - 如何找到 'No Join Predicate' 的来源

mysql - SQL - 在这种情况下可以避免游标吗?

SQL Server 2008 Merge 语句多匹配条件

sql-server - "ORDER BY (SELECT NULL)"是什么意思?

sql-server - 为什么或何时将 SET XACT_ABORT 设置为 OFF?

python - 将值列表从 Python 传递到 SQL 查询的 IN 子句

sql - 只选择第一个结果...有更好的方法吗?