我有一个表,除第一列(ID)
外,所有其他列都填充了记录(超过10000条记录)。我希望为所有记录填充序列号为(1,2,3,4...)
的 ID 列。
预期产出:
我尝试过以下声明:
SELECT ROW_NUMBER() OVER(ORDER BY ID) AS ID, Name FROM TableName
但是无法在UPDATE语句中使用ROW_NUMBER()。
怎么做?
答案 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