Sql server 从select语句更新表并设置顶行

Sql server 从select语句更新表并设置顶行,sql-server,Sql Server,得到了一个SQL表,我想在执行此操作时查询并更新前5行。以下内容不适用于此问题,但可能会解释我正在尝试的内容: UPDATE TempStaging SET pending = 'running' FROM (SELECT TOP 5 scan FROM TempStaging WHERE pending = 'outstanding') 您可以使用CTE更新: 注:没有ORDER BY子句的TOP将选择5条任意指定的记录 编辑:要获取正在更新的

得到了一个SQL表,我想在执行此操作时查询并更新前5行。以下内容不适用于此问题,但可能会解释我正在尝试的内容:

UPDATE 
    TempStaging
SET 
    pending = 'running'
FROM 
    (SELECT TOP 5 scan FROM TempStaging
         WHERE pending = 'outstanding')
您可以使用CTE更新:

注:没有ORDER BY子句的TOP将选择5条任意指定的记录

编辑:要获取正在更新的记录的名称值,可以使用该子句,正如@C.White的注释中所述:

;WITH ToUpdate AS (
   SELECT TOP 5 pending, name  
   FROM #TempStaging
   WHERE pending = 'outstanding'
)
UPDATE ToUpdate
SET pending = 'running'
OUTPUT inserted.name
试试这个

UPDATE Top(5) TempStaging SET pending = 'running' WHERE pending = 'outstanding'

最简单的方法是使用UPDATE的WHERE子句来选择值。。。在选择的前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
因此,就您的特定示例而言,它可能是:

UPDATE 
  TempStaging
SET 
  pending = 'running'
WHERE
  scan IN (SELECT TOP 5 scan FROM TempStaging WHERE pending = 'outstanding' ORDER BY scan)

希望有帮助

UPDATE has TOP子句,也存在重复的文章,假设您有某种类型的键来对记录进行排序:您的查询是错误的。在FROM之后,您应该使用表名,但您使用了SELECT语句。谢谢-如果有两列名称&待定,那么如何为这些前5行输出名称?@dross输出名称是什么意思?这是一个UPDATE语句。对于此示例:;将ToUpdate设置为SELECT TOP 5 pending FROM TempStaging,其中pending='Understanding'更新ToUpdate SET pending='running'输出已插入。pending,插入。name@Giorgos贝索斯:我希望语句返回受影响行的名称值。考虑到我最初提出的问题,为了清晰起见,我已将Giorgos Betsos答案标记为正确。
UPDATE 
  TempStaging
SET 
  pending = 'running'
WHERE
  scan IN (SELECT TOP 5 scan FROM TempStaging WHERE pending = 'outstanding' ORDER BY scan)