我很惊讶地看到以下更新了34行...而不是5行:

UPDATE
 Message
 SET StatusRawCode = 25
WHERE StatusRawCode in
  (
     Select TOP 5
      M2.StatusRawCode
       From Message as M2
        Where M2.StatusRawCode = 5
  )


关于如何将其敲打成正确形状的任何想法?

谢谢!

最佳答案

我的猜测是您的子查询返回的StatusRawCode值是已更新的34条记录中使用的值。代替

WHERE StatusRawCode IN


用这个:

UPDATE
    Message
SET StatusRawCode = 25
    WHERE PrimaryKey in
    (
        Select TOP 5
            PrimaryKey
        From Message as M2
        Where M2.StatusRawCode = 5
    )


本质上,您将在子查询中选择要更新的5行的主键。请记住,这将根据表的聚集索引顺序仅更新前5条记录。如果需要为TOP 5记录指定特定条件,则需要添加order by子句。

例如,如果您要使用一个名为Rank的列作为条件,请这样编写查询:

UPDATE
    Message
SET
    StatusRawCode = 25
WHERE
    PrimaryKey IN
    (
        SELECT TOP 5
            PrimaryKey
        FROM
            Message as M2
        WHERE
            M2.StatusRawCode = 5
        ORDER BY
            Rank DESC
    )


这将为您提供基于排名列值的TOP 5记录。您可以根据需要替换您的列。

10-06 09:16