SQL Server行编号

SQL Server行编号,sql,sql-server,Sql,Sql Server,我想用数字1,2,3,4更新SrNo列,而不改变其他列的顺序 只有在存在可以提供排序的列的情况下,才有必要使用行号。假设排序由TextCol列指定,那么我们可以尝试以下操作: SrNo TextCol -------------- NULL ABC NULL ABC NULL ASC NULL qwe 表是无序的,所以不能依赖“现有序列”。然而,一个“技巧”是使用selectnull,这实际上对行顺序没有任何影响。虽然它有效,但你不应该依赖它作为一个永久的解决方案 WITH

我想用数字1,2,3,4更新
SrNo
列,而不改变其他列的顺序

只有在存在可以提供排序的列的情况下,才有必要使用行号。假设排序由
TextCol
列指定,那么我们可以尝试以下操作:

SrNo   TextCol
--------------
NULL   ABC
NULL   ABC
NULL   ASC
NULL   qwe

表是无序的,所以不能依赖“现有序列”。然而,一个“技巧”是使用
selectnull
,这实际上对行顺序没有任何影响。虽然它有效,但你不应该依赖它作为一个永久的解决方案

WITH cte AS (
    SELECT SrNo, TextCol, ROW_NUMBER() OVER (ORDER BY TextCol) rn
    FROM yourTable
)

UPDATE cte
SET SrNo = rn;

您是否可以与其他textcol(如
cza、cbc
)共享示例输出……实际上,没有什么可更改或保留的。Sql表是一组无序的行。对行进行排序的唯一方法是在查询中指定显式order BY。您使用的sql server版本是什么?表上有聚集索引吗?如果您使用的是sql server 2012或更高版本,则可以使用序列将这些值插入到表中。
WITH cte AS (
        SELECT SrNo, TextCol
            , ROW_NUMBER() OVER (ORDER BY (select NULL)) rn
        FROM yourTable
     )
UPDATE cte
SET SrNo = rn;