如何设置列值等于行号?

时间:2012-06-20 09:39:34

标签: sql-server-2008 sql-update row-number

如何设置在更改表之后添加的列的值等于sql server 2008中的行no。这就是我希望列的值等于no。排。我也希望这个字段允许NULL值。所以它就像自动增量但允许空值,这就是为什么不想使用带有自动增量的标识或主键列的原因。那怎么设置为排?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:11)

如果您尝试使用ROW_NUMBER()直接更新列,您将获得...

  

窗口函数只能出现在SELECT或ORDER BY子句中。

...所以改为INNER将表格加入到自身......

UPDATE
    [test123]
SET
    [row_number] = [x].[rn]
FROM
    [test123]
INNER JOIN
    (
        SELECT
            [test_id],
            ROW_NUMBER() OVER (ORDER BY [test_id]) AS rn
        FROM
            [test123]
    ) AS x
ON 
    [test123].[test_id] = [x].[test_id]

答案 1 :(得分:1)

怎么样:它会将所需列的值更新为行号。

select  'Update myTable set row_No = ' + 
CAST(ROW_NUMBER() over (order by ID) as varchar) + ' Where ID = ' +  
cast(ID as varchar) from myTable

- 结果将生成一个更新语句,当您运行它时,会将所需列的值更新为行号。