Ваш оператор 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);