Частично дублирующиеся данные в той же таблице SQL - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть таблица с 20000 записей.

Мне нужно продублировать «некоторые» данные, но с новым названием компании.

Таблица имеет уникальный идентификатор, который не является автоинкрементным, поэтому при каждой вставке мне нужно найти МАКС (уникальный идентификатор) и добавить 1.

Следующие скрипты работают, но имеют ужасную производительность.

DECLARE @RowCount AS INTEGER;
SELECT  @RowCount = COUNT(1)
FROM    [dbo].[TableAAA];


DECLARE @intFlag INT;
SET @intFlag = 1;
WHILE ( @intFlag <= @RowCount )
    BEGIN
        INSERT  INTO [dbo].[TableAAA]
                ( UniqueID ,
                  company ,
                  Agent ,
                  Phone
                )
                SELECT TOP 1
                        ( SELECT    MAX(UniqueID) + 1
                          FROM      [dbo].[TableAAA]
                        ) ,
                        'New Company' ,
                        Agent ,
                        Phone
                FROM    [dbo].[TableAAA] c
                WHERE   c.companyid = 'Old Company'
                        AND c.phone NOT IN ( SELECT Phone
                                             FROM   [dbo].[TableAAA]
                                             WHERE  company = 'New Company' );


        SET @intFlag = @intFlag + 1;
    END;

1 Ответ

0 голосов
/ 06 сентября 2018

Я бы использовал MAX (UniqueID) в качестве SEED, а затем увеличивал его при подходе, основанном на наборе

declare @Seed int = (select MAX(UniqueID) FROM [dbo].[TableAAA])

SELECT 
   ID = row_number() over (order by (select null)) + @Seed
   'New Company',
    Agent,
    Phone
INTO 
    #Staging
FROM
    [dbo].[TableAAA] c
WHERE   
    c.companyid = 'Old Company'
    AND c.phone NOT IN ( SELECT Phone
                         FROM   [dbo].[TableAAA]
                         WHERE  company = 'New Company' )

INSERT INTO  [dbo].[TableAAA]
              (UniqueID,
               company,
               Agent,
               Phone)
SELECT
    ID,
    [New Company],
    Agent,
    Phone
FROM #Staging

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