Скрипт для обновления тысяч записей SQL с уникальным идентификатором - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть таблица с именем «users» с 5800 записями, где externalID равен NULL.Я хочу добавить уникальный externalID для каждой из этих записей в следующем формате: 'legacy_N', где N - это число от 1 до 5800.

this:

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 часов, обновляя их по одному?

1 Ответ

3 голосов
/ 19 сентября 2019

Вот пример, основанный на данных в вашем вопросе:

-- 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;

Если вы хотите сделать заказ по идентификатору, вы можете вместо этого заменить предложение ROW_NUMBER на «OVER (ORDER BY ID)».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...