Слияние TSQL: <WHEN NOT MATCHED> не пропускает дубликаты

Я использовал следующий код для обновления или вставки записи из одной таблицы в другую, но оператор вставки не пропускает при дублировании записи. Как я могу обойти это?

Я получаю следующую ошибку. Я хочу пропустить дублирующую запись и вставить новую

Сообщение 2627, уровень 14, состояние 1, строка 6 Нарушение ограничения PRIMARY KEY 'PK_MIBOMD_KEY_0'. Невозможно вставить дубликат ключа в объект 'dbo.MIBOMD'. Дублирующее значение ключа равно (, 0, 1). Заявление было прекращено.

MERGE [MIBOMD] AS TARGET
USING [whl] AS SOURCE 


ON (TARGET.[bomItem] = SOURCE.ItemID AND TARGET.bomEntry = SOURCE.bomEntry AND TARGET.bomRev = SOURCE.rev)

WHEN MATCHED AND TARGET.bomEntry = SOURCE.bomEntry 
AND TARGET.partId <> SOURCE.partid THEN 
UPDATE SET TARGET.partId = SOURCE.partid

WHEN NOT MATCHED BY TARGET THEN 
INSERT (partId,bomEntry, srcLoc, qty, lead) 
VALUES (SOURCE.partid, SOURCE.bomEntry, 'R14SDS', SOURCE.qty, SOURCE.lead);

1 ответ

Как вы заявили, уникальность в источнике гарантируется ItemID + PartID, Между тем, вы подходите по источнику (ItemID,bomEntry,rev)=target.(bomItem,bomEntry,bomRev),

Вполне возможно, что у вас будет что-то с тем же набором (ItemID,bomEntry,rev) в источнике но есть два разных PartID,

Также среди INSERTed столбцы, которые вы указали, нет bomRev,bomItem,
Есть ли ограничения по умолчанию для этих столбцов? Будут ли они гарантировать уникальность?

Другие вопросы по тегам