在没有主键的表的新列上填充行号

VKa*_*hik 2 t-sql sql-server sql-server-2012

我有一个表,我在其中添加了一个新列来指示行号。该表没有任何关联的主键,所以我不确定如何用行号值填充它。

这是我放在 CTE 中的代码,但在主表中我不知道如何关联 Id 列。Id 是我需要开始编号的新添加的列。

;with CTE_RowNum as (
    select  
        ROW_NUMBER() OVER (ORDER BY NEWID()) AS RowId
        ,Id 
    from dbo.Test
)
Run Code Online (Sandbox Code Playgroud)

我可以在某些列上对表进行分区,但是如何将这些条件与原始表连接起来?


编辑 - 这是我所指的架构。Id 是我想用行号填充的新添加的列。Name 和 Error 列一起形成唯一性。

预期输出将是 -

1,ABC,Time Out Issue
2,ABC,Page Not Found
3,DEF,Page Not Found
Run Code Online (Sandbox Code Playgroud)

顺序无关紧要,我的意思是最后一行可以有“1”,其他的可以有其他值。

我可以考虑将数据重新填充到插入 Identity 的新表中的另一种方式,但只是想知道有没有办法通过 T-SQL 做到这一点?

CREATE TABLE #Test
(
    Id INT
    ,Name NVARCHAR(100)
    ,Error NVARCHAR(100)

)

INSERT INTO #Test (Name,Error) VALUES 
    ('ABC','Time Out Issue')
    ,('ABC','Page Not Found')
    ,('DEF','Page Not Found')
Run Code Online (Sandbox Code Playgroud)

Cod*_*ent 5

这真的很简单:

;WITH cte AS
(
    SELECT Id, ROW_NUMBER() OVER (ORDER BY NEWID()) AS RowId
    FROM   #test
)

UPDATE cte
    SET Id = RowId
Run Code Online (Sandbox Code Playgroud)