将标识序列值添加到列ID

时间:2014-06-11 07:28:58

标签: sql-server

我有一个表,除第一列(ID)外,所有其他列都填充了记录(超过10000条记录)。我希望为所有记录填充序列号为(1,2,3,4...) ID 列。

enter image description here

预期产出:

enter image description here

我尝试过以下声明:

SELECT ROW_NUMBER() OVER(ORDER BY ID) AS ID, Name FROM TableName

但是无法在UPDATE语句中使用ROW_NUMBER()。

怎么做?

2 个答案:

答案 0 :(得分:2)

也许是这样的:

测试数据:

DECLARE @tbl TABLE(ID INT,Name VARCHAR(2))

INSERT INTO @tbl
VALUES
    (null,'A'),
    (null,'B'),
    (null,'C'),
    (null,'D'),
    (null,'E')

然后像这样更新语句:

;WITH CTE
AS
(
    SELECT
        ROW_NUMBER() OVER(ORDER BY name) AS rowNbr,
        tbl.*
    FROM
        @tbl AS tbl
)
UPDATE CTE
    SET CTE.ID=CTE.rowNbr

然后输出:

SELECT * FROM @tbl

将是这样:

1   A
2   B
3   C
4   D
5   E

答案 1 :(得分:1)

您不能将现有列更改为IDENTITY,但可以添加新标识列(前提是表中只有1个标识)。鉴于您现有的ID包含所有NULL,为什么不删除并重新添加?

ALTER TABLE MyTable DROP Column ID;
GO

Alter Table MyTable Add ID Int Identity(1, 1)
Go

SqlFiddle here