使用特定范围的数字更新表行范围的SQL语句

3

我正在尝试使用这个脚本:

UPDATE tablename
SET tablecolumn = abs(checksum(NewId()) % 100 + 1)
WHERE ID between 162 and 166

我想要做的是将第162到166行更新为1-5,如下所示:

162 1
163 2
164 3
165 4
166 5 

只需减去161? newid()与此有什么关系? - shawnt00
2个回答

4

您可以使用ROW_NUMBER()生成序列。但是SET column = ROW_NUMBER() ...无效。相反,您需要在内联视图(或CTE)中选择值,然后更新值。

UPDATE t
SET t.tablecolumn = t.tablecolumn_new
FROM (
      SELECT id, tablecolumn, ROW_NUMBER() OVER (ORDER BY [id]) AS tablecolumn_new
      FROM tablename
     WHERE id between 162 and 166
      ) t;

DEMO


在第7行出现语法错误:Msg 102,级别15,状态1:'.'附近的语法不正确。 - GTITC

1

万一有人只需要特定的值而不是答案...SQL信用归功于@Conrad Frix。

UPDATE t
SET t.tablecolumn = 100 --Changed this
FROM (
  SELECT id, tablecolumn --Changed this
  FROM tablename
 WHERE id between 162 and 166
  ) t;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接