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

时间:2017-11-27 10:41:09

标签: sql sql-server multithreading tsql

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

1 个答案:

答案 0 :(得分:4)

您可以改为执行带有OUTPUT子句的SELECT,而不是DELETE后跟DELETEOUTPUT子句生成结果集,但您现在直接从DELETE获取结果集,因此它是单个原子操作 - 两个独立的执行不会产生相同的输出行。