【问题标题】:how to set column value equal to row no?如何设置列值等于行号?
【发布时间】:2012-06-22 10:11:09
【问题描述】:

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

【问题讨论】:

  • autoincrement 不会为行号设置值:如果您插入 50 个项目然后删除它们,插入下一个项目将获得值 51,即使它是表中唯一的行,它的行号应该是一。
  • 是的,这是真的。那么如何将列值设置为行号?

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


【解决方案1】:

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

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

...所以改为 INNER JOIN 表自身...

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]

【讨论】:

    【解决方案2】:

    这样呢:它将所需列的值更新为行号。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多