有一个SQL表,我想查询并更新前5行。以下不起作用(因此问题)但可能解释我正在尝试的是什么:
UPDATE
TempStaging
SET
pending = 'running'
FROM
(SELECT TOP 5 scan FROM TempStaging
WHERE pending = 'outstanding')
答案 0 :(得分:4)
您可以使用CTE
至UPDATE
:
;WITH ToUpdate AS (
SELECT TOP 5 pending
FROM TempStaging
WHERE pending = 'outstanding'
)
UPDATE
ToUpdate
SET
pending = 'running'
注意: TOP
在没有ORDER BY
子句的情况下使用会选择5个任意指定的记录。
修改:要获取正在更新的记录的Name
值,您可以使用OUTPUT
子句,如@C评论中所述。白:
;WITH ToUpdate AS (
SELECT TOP 5 pending, name
FROM #TempStaging
WHERE pending = 'outstanding'
)
UPDATE ToUpdate
SET pending = 'running'
OUTPUT inserted.name
答案 1 :(得分:1)
最直接的方法是使用UPDATE
的{{1}}子句来选择值...嵌入WHERE
应该这样做。
示例:
IN (SELECT TOP 5 ...)
因此,根据您的具体示例,可能是:
create table ##dummy (pk int IDENTITY (1,1) PRIMARY KEY, vals varchar(50));
INSERT INTO ##dummy (vals) VALUES
('updateme')
,('updateme')
,('updateme')
,('updateme')
,('updateme')
,('leavemealone')
,('leavemealone')
,('leavemealone')
,('leavemealone')
,('leavemealone')
,('leavemealone')
,('leavemealone')
,('leavemealone')
SELECT * FROM ##dummy
UPDATE ##dummy
SET vals = 'fixed!'
WHERE
pk in (SELECT TOP 5 pk FROM ##dummy ORDER BY pk)
SELECT * FROM ##dummy
DROP TABLE ##dummy
希望有所帮助!
答案 2 :(得分:0)
试试这个
UPDATE Top(5) TempStaging SET pending = 'running' WHERE pending = 'outstanding'