使用顺序标识符填充新ID列

时间:2015-05-08 02:14:16

标签: sql-server tsql sql-server-2005

我需要使用从" PM1000000000"开始的唯一序列填充列nvarchar(12)。并且每行增加1。没有标识列或主键(编辑)循环使得这个问题非常具有挑战性,因为我发现的大部分示例都使用标识列来循环

我在https://support.microsoft.com/en-us/kb/111401的MSDN上找到了一个示例,示例3,但它没有显示增加一行

任何人都可以帮助我填充此字段,以便我可以将其作为主键吗?注意:这个表有6000万行,但我现在可以接受任何想法,只是让这个工作

2 个答案:

答案 0 :(得分:6)

您可以使用ROW_NUMBER()

SELECT
    ID = 'PM' + CONVERT(NVARCHAR(10), ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) + 1000000000 - 1)
FROM <YourTable>

UPDATE 声明

;WITH Cte AS(
    SELECT *,
        RN = 'PM' + CONVERT(NVARCHAR(10), ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) + 1000000000 - 1)
    FROM TestData
)
UPDATE Cte SET ID = RN

答案 1 :(得分:0)

您可以使用光标。但这会很慢。我已经将游标用于大约1MM记录的数据表,但不是60MM。你可以在这里找到一个光标的例​​子。

https://msdn.microsoft.com/en-us/library/ms180169.aspx