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