例如下面的代码,箭头指向两部分,第二部分是否可以使用第一部分的结果,而不是再次查询数据库?
CREATE PROCEDURE GetInforEntries (@Count as int) AS
BEGIN
SELECT TOP (@Count) *
from Table_Entries
where Retrived IS NULL <----
IF @@ROWCOUNT > 0
BEGIN
UPDATE Table_Entries
SET Retrived = CURRENT_TIMESTAMP
WHERE id IN (SELECT TOP (@Count) id <----
from Table_Entries
where Retrived IS NULL)
END
END
最佳答案
在 UPDATE 语句中使用 CTE:
WITH sample AS (
SELECT TOP(@count)
te.*
FROM TABLE_ENTRIES te
WHERE te.retrieved IS NULL)
UPDATE sample
SET retrieved = CURRENT_TIMESTAMP
无需检查@@ROWCOUNT/etc - 如果没有任何行与TABLE_ENTRIES.retrieved
为空的情况匹配,则查询无需更新任何内容。
文档
关于sql - 如何在 SQL SERVER PROCEDURE 中重用选择结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4129724/