Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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
Sql 选择“然后更新这些记录”,然后在存储过程中返回它们_Sql_Sql Server - Fatal编程技术网

Sql 选择“然后更新这些记录”,然后在存储过程中返回它们

Sql 选择“然后更新这些记录”,然后在存储过程中返回它们,sql,sql-server,Sql,Sql Server,我想做一个选择来获得一个ID列表,根据这些ID进行更新,然后返回这些记录 我猜是这样的,我只是不知道语法: SELECT WebHookLogIDs = FROM WebHookLog WHERE Processing=0 AND Processed=0 AND Paused=0 ORDER BY FailCount

我想做一个选择来获得一个ID列表,根据这些ID进行更新,然后返回这些记录

我猜是这样的,我只是不知道语法:

  SELECT WebHookLogIDs = FROM WebHookLog 
                WHERE Processing=0
                    AND Processed=0
                        AND Paused=0
                            ORDER BY FailCount ASC, WebHookLogID DESC

    UPDATE WebHookLog
        SET Processing = 1
            WHERE WebHookLogID IN(WebHookLogIDs)

    SELECT * FROM WebHookLog 
            WHERE WebHookLogID IN(WebHookLogIDs)
像这样的

UPDATE WebHookLog SET PROCESSING = 1 WHERE WebHookLogID IN ( SELECT WebHookLogIDs = FROM WebHookLog WHERE Processing=0 AND Processed=0 AND Paused=0) SELECT * FROM WebHookLog WHERE WebHookLogID IN(WebHookLogIDs) 不能使用相同的SQL语句使用SELECT进行更新。但是,您可以使用JOIN进行更新,而不是像这样选择ID:

UPDATE w1
SET w1.Processing = 1
FROM WebHookLog w1
INNER JOIN WebHookLog w2  ON w1.WebHookLogID = w2.WebHookLogID 
                         AND w2.Processing    = 0
                         AND w2.Processed     = 0
                         AND w2.Paused        = 0;

稍后,您可以执行另一个SELECT子句。

我认为将数据放入临时表比在其中插入数据更好

因为最后您希望返回这些记录,所以需要使用临时表

DECLARE @Table1 TABLE (WebHookLogIDs INT)

Insert into @Table1(WebHookLogIDs )
SELECT WebHookLogIDs  FROM WebHookLog 
                WHERE Processing=0
                    AND Processed=0
                        AND Paused=0
                            ORDER BY FailCount ASC, WebHookLogID DESC

    UPDATE WebHookLog
        SET Processing = 1
            WHERE WebHookLogID IN( select WebHookLogIDs from @Table1)

    SELECT * FROM WebHookLog 
            WHERE WebHookLogID IN(select WebHookLogIDs from @Table1)
    DROP TABLE @Table1

我相信您也可以尝试进行输出更新。更多信息,抱歉,这是一个存储Procedure@Slee好的,对不起,然后把SELECT子句放在它后面。那么@Table1在查询运行后就消失了吗?@Slee-是的,它的临时表一旦被执行就会消失,但是你可以通过写drop table语句来删除它