首页 > 解决方案 > 使用唯一 ID 更新数千条 SQL 记录的脚本

问题描述

我有一个名为“users”的表,其中包含 5800 条记录,其中 externalID 为 NULL。我想以下列格式为每个记录添加一个唯一的 externalID:“legacy_N”,其中 N 是 1 到 5800 之间的某个数字。

这个:

ID     externalID     Name      AddedUTC
123                   John      2019-09-19 15:14:11.837
634                   Susan     2019-09-18 20:39:38.247
499                   Lolita    2019-09-18 19:58:29.320
...

变成这样:

ID     externalID     Name      AddedUTC
123    legacy_1       John      2019-09-19 15:14:11.837
634    legacy_2       Susan     2019-09-18 20:39:38.247
499    legacy_3       Lolita    2019-09-18 19:58:29.320
...

无论如何我可以以编程方式做到这一点?还是我要花 8 个小时来一一更新这些?

标签: sql-server

解决方案


这是基于您问题中的数据的示例:

-- Create a test table with test data in it
CREATE TABLE TestData([ID] int, [externalID] varchar(20), [Name] varchar(50), [AddedUTC] datetime);
INSERT INTO TestData ([ID], [externalID], [Name], [AddedUTC])
VALUES (123, NULL, 'John', '2019-09-19 15:14:11.837'),
       (499, NULL, 'Lolita', '2019-09-18 19:58:29.320'),
       (634, NULL, 'Susan', '2019-09-18 20:39:38.247');

-- Display the test data
SELECT * FROM TestData;

-- Do the update
WITH NumberedData AS (
    SELECT ID, ROW_NUMBER() OVER (ORDER BY AddedUTC) AS RowNum 
      FROM TestData
)
UPDATE td
   SET [externalID] = 'Legacy_' + CAST(RowNum AS varchar)
  FROM TestData td
       INNER JOIN NumberedData nd ON td.ID = nd.ID

-- Display updated data
SELECT * FROM TestData;

如果您想按 ID 排序,则可以将 ROW_NUMBER 子句改为“OVER(ORDER BY ID)”。


推荐阅读