我很惊讶地看到以下更新了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记录。您可以根据需要替换您的列。