Импорт данных и игнорирование дубликатов в SQL Server - PullRequest
0 голосов
/ 04 ноября 2011

Я использую SQL Server 2008 R2.У меня есть исходная таблица данных (I_Vendor), которая может иметь дубликаты в столбце CompanyName.Я хочу импортировать эти данные в новую таблицу (Vendor), но у новой таблицы есть столбец Name (который соответствует CompanyName) с уникальным ограничением.Прошло много времени с тех пор, как я написал SQL, но я увидел функцию MERGE, и, похоже, она отвечает всем требованиям.Я написал следующее:

MERGE Vendor AS T
USING I_Vendor AS S
ON (T.Name = S.CompanyName) 
WHEN NOT MATCHED BY TARGET 
    THEN INSERT(VendorId, Name, ContactName, ContactInfoId) 
        VALUES(S.Vendor_ID, S.CompanyName, S.ContactName, S.Vendor_ID+10000);

Он генерирует «Нарушение ограничения UNIQUE KEY» и дает имя уникального ограничения на Vendor.Name.Кто-нибудь знает, что я делаю не так?

1 Ответ

1 голос
/ 04 ноября 2011

Ваш оператор MERGE вставит все строки из I_Vendor, у которых нет соответствующей строки в таблице Vendor.

Например, предположим, что в таблице I_Vendor есть две строки с названием компании "X", и далее предположим, что название компании "X" не отображается в таблице Vendor, тогда оба строки будут вставлены в таблицу Vendor, что нарушает ограничение.

Чтобы решить эту проблему, необходимо убедиться, что в исходных данных оператора MERGE имеется только одна строка для каждого названия компании. Это делается следующим оператором слияния, но, как уже указывал Адитья Найду, мы не знаем, что вы хотите делать, когда в таблице I_Vendor несколько записей с одним и тем же названием компании:

MERGE Vendor AS T
USING (SELECT MAX(Vendor_ID), CompanyName, MAX(ContactName), MAX(ContactInfoId)
       FROM I_Vendor
       GROUP BY CompanyName) AS S
WHEN NOT MATCHED BY TARGET 
    THEN INSERT(VendorId, Name, ContactName, ContactInfoId) 
         VALUES(S.Vendor_ID, S.CompanyName, S.ContactName, S.Vendor_ID+10000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...