sql - 如何在 SQL SERVER PROCEDURE 中重用选择结果

标签 sql sql-server sql-server-2005 t-sql stored-procedures

例如下面的代码,箭头指向两部分,第二部分是否可以使用第一部分的结果,而不是再次查询数据库?

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/

相关文章:

c# - 如何在 C# 中将数组添加到 SQL 行?

mysql - 更新...从 MySQL 中

sql-server-2005 - 这是欧洲+英语语言的最佳排序

mysql - 重组/分区数据库表

sql-server - 数据库服务器上的强数据库名称

sql - 更改表中的 2 列 - 有风险的操作吗?

sql-server - 微软 SQL Server 2005 : What Happens If LDF-file are lost?

mysql - 如何在mysql中使用in子句替换函数

java - 从组合框获取数据到数据库

sql - 在 Visual Studio 2010 中保存 SQL