小编典典

选择行并更新相同的行以进行锁定?

sql

我需要编写一个过程,该过程将允许我选择x数量的行,并同时更新这些行,以便调用应用程序将知道这些记录已锁定并正在使用。我在表中有一个名为“锁定”的列。下次调用该过程时,它将仅提取下一个x数量未选中“锁定”列的记录。我已经阅读了一些有关SQL
Server的OUTPUT方法的信息,但是不确定这是我想要做的。


阅读 173

收藏
2021-04-14

共1个答案

小编典典

使用OUTPUT投票表决Cade Roux的答案:

UPDATE #tbl
   SET locked = 1
OUTPUT INSERTED.*
 WHERE id IN (SELECT TOP 1 id
                FROM #tbl
               WHERE locked = 0
            ORDER BY id)鈥�

之前:


这是我可以想到的使用临时表的少数情况之一:

ALTER PROCEDURE temp_table_test
AS
BEGIN

   SELECT TOP 5000 * 
     INTO #temp_test
     FROM your_table
    WHERE locked != 1
 ORDER BY ?

   UPDATE your_table
      SET locked = 1
    WHERE id IN (SELECT id FROM #temp_test)

   SELECT *
     FROM #temp_test

   IF EXISTS (SELECT NULL
                FROM tempdb.dbo.sysobjects
               WHERE ID = OBJECT_ID(N'tempdb..#temp_test'))
   BEGIN
     DROP TABLE #temp_test
   END

END

这:

  1. 获取所需的行,将其填充到本地临时表中
  2. 使用临时表更新要“锁定”的行
  3. 临时表中的SELECT可以为您提供结果集输出
  4. 删除临时表,因为它们用于该会话
2021-04-14