如何在SQLServer过程中重用选择结果
例如,下面的代码,箭头指向两部分,第二部分可以使用第一部分的结果,而不是再次查询数据库吗如何在SQLServer过程中重用选择结果,sql,sql-server,sql-server-2005,tsql,stored-procedures,Sql,Sql Server,Sql Server 2005,Tsql,Stored Procedures,例如,下面的代码,箭头指向两部分,第二部分可以使用第一部分的结果,而不是再次查询数据库吗 CREATE PROCEDURE GetInforEntries (@Count as int) AS BEGIN SELECT TOP (@Count) * from Table_Entries where Retrived IS NULL <---- IF @@ROWCOUNT &
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为null的位置匹配,则查询没有任何要更新的内容
文件
您可以声明一个表变量或创建一个临时表来存储第一个查询的结果
DECLARE @MyTempTable (column-list)
INSERT INTO @MyTempTable (column-list...)
SELECT TOP(@Count) *
FROM Table_Entries
WHERE Retrieved IS NULL
-- display results of first query
SELECT *
FROM @MyTempTable
IF @@ROWCOUNT > 0
BEGIN
UPDATE Table_Entries
SET Retrived = CURRENT_TIMESTAMP
WHERE id IN (SELECT id <----
from @MyTempTable)
只有当您希望显示第一个查询的结果,并且第一个查询中返回的行数提高了更新的性能时,这才是有益的