Sql 选择“然后更新这些记录”,然后在存储过程中返回它们
我想做一个选择来获得一个ID列表,根据这些ID进行更新,然后返回这些记录 我猜是这样的,我只是不知道语法: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
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语句来删除它