如何在SQL Server 2012中添加行号列

Mic*_*per 16 sql sql-server row-number ranking ranking-functions

我正在尝试向现有表添加新列,其中值是行号/等级.我需要一种方法来生成行号/等级值,我还需要限制受影响的行 - 在这种情况下,字符串中存在子字符串.

现在我有:

UPDATE table
SET row_id=ROW_NUMBER() OVER (ORDER BY col1 desc) FROM table
WHERE CHARINDEX('2009',col2) > 0
Run Code Online (Sandbox Code Playgroud)

我收到这个错误:

Windowed functions can only appear in the SELECT or ORDER BY clauses.
Run Code Online (Sandbox Code Playgroud)

(同样的错误RANK())

有没有办法用ROW_NUMBER()函数创建/更新列?仅供参考,这意味着要替换不正确的,已存在的"排名"列.

Ian*_*ton 26

您可以使用CTE执行此操作,例如:

with cte as
(
  select *
    , new_row_id=ROW_NUMBER() OVER (ORDER BY col1 desc)
  from MyTable
  where charindex('2009',col2) > 0
)
update cte
set row_id = new_row_id
Run Code Online (Sandbox Code Playgroud)

SQL小提琴演示.