Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQLServer过程中重用选择结果_Sql_Sql Server_Sql Server 2005_Tsql_Stored Procedures - Fatal编程技术网

如何在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)     
只有当您希望显示第一个查询的结果,并且第一个查询中返回的行数提高了更新的性能时,这才是有益的