使用顺序标识符填充新的 ID 列
Populate new ID Column with Sequential Identifiers
我需要使用从 "PM1000000000" 开始的唯一序列填充列 nvarchar(12) 并且每行递增 1。没有标识列或主键(编辑)可以循环,这使得这个问题非常具有挑战性,因为我发现的大多数示例都使用标识列来循环
我在 https://support.microsoft.com/en-us/kb/111401 的 MSDN 上找到了示例 3,但它没有显示递增行
任何人都可以帮我填充这个字段,以便我可以将其设为主键吗?注意:这个 table 有 6000 万行,但我现在对任何想法都持开放态度,以使其正常工作
您可以使用光标。不过,它会很慢。我已经将游标用于具有 ~1MM 记录但不是 60MM 的数据表。您可以在此处找到游标示例。
您可以使用 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
我需要使用从 "PM1000000000" 开始的唯一序列填充列 nvarchar(12) 并且每行递增 1。没有标识列或主键(编辑)可以循环,这使得这个问题非常具有挑战性,因为我发现的大多数示例都使用标识列来循环
我在 https://support.microsoft.com/en-us/kb/111401 的 MSDN 上找到了示例 3,但它没有显示递增行
任何人都可以帮我填充这个字段,以便我可以将其设为主键吗?注意:这个 table 有 6000 万行,但我现在对任何想法都持开放态度,以使其正常工作
您可以使用光标。不过,它会很慢。我已经将游标用于具有 ~1MM 记录但不是 60MM 的数据表。您可以在此处找到游标示例。
您可以使用 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