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

时间:2016-01-07 02:56:27

标签: sql-server tsql sql-server-2012

我有一个表格,我在这里添加一个新列来表示行号。此表没有关联任何主键,因此我不确定如何使用行号值填充它。

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

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

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

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

预期输出将是 -

1,ABC,Time Out Issue
2,ABC,Page Not Found
3,DEF,Page Not Found

顺序没关系,我的意思是最后一行可以有'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')

1 个答案:

答案 0 :(得分:4)

这很简单:

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

UPDATE cte
    SET Id = RowId