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

use*_*150 1 t-sql sql-server sql-server-2005

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

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

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

Fel*_*tan 6

你可以使用ROW_NUMBER():

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

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
Run Code Online (Sandbox Code Playgroud)