使用OUTPUT投票表决Cade Roux的答案:
之前:UPDATe #tbl SET locked = 1OUTPUT INSERTED.* WHERe id IN (SELECT TOP 1 id FROM #tbl WHERe locked = 0 ORDER BY id)鈥�
这是我可以想到的使用临时表的少数情况之一:
ALTER PROCEDURE temp_table_testASBEGIN 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 ENDEND
这:
- 获取所需的行,将其填充到本地临时表中
- 使用临时表更新要“锁定”的行
- 临时表中的SELECT可以为您提供结果集输出
- 删除临时表,因为它们用于该会话
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)