sql - 访问第一行并立即将其删除

标签 sql sql-server multithreading tsql

我有一个用于存储任务的表,该任务需要执行到“任务队列”表中,因为我正在使用多线程从该表中获取前1名,然后执行该任务。我从任务队列中获得前1条记录,然后删除该记录。因此,例如,如果另一个线程在上一个线程删除它选择的任务之前执行,则两个线程可能会显示相同的线程。我想知道是否有一种方法可以停止从数据库中进行其他读取,直到我当前的线程删除它选择的线程为止?

最佳答案

而不是先执行SELECT后再执行DELETE,而可以使用 DELETE 子句执行OUTPUTOUTPUT子句产生一个结果集,但是现在您可以直接从DELETE获得该结果集,因此它是单个原子操作-两个独立的执行将不会产生相同的输出行。

关于sql - 访问第一行并立即将其删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47508983/

相关文章:

php - MYSQL : SET value in an UPDATE query when all conditions of subquery are satisfied

sql - 截断所有 MySql 表的 shell 脚本

c# - 使用 SQL 命令从数据库读取最后插入的 UID

multithreading - 我该如何打断Play中的实时任务!框架

.net - 如何限制逻辑调用上下文的范围

c# - 使用 C# 在 MySQL 中使用 Select 和 Where 参数 = any\dontcare

sql-server - 无法修改 Azure 上的存储过程

sql-server - Zend Framework 2 Microsoft SQL Server 2008 数据库连接

java - 如何从 fragment 中的后台线程更新 UI

sql - PostgreSQL 在 alter table 上添加 EXCLUDE 约束