Слияние 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
,
Есть ли ограничения по умолчанию для этих столбцов? Будут ли они гарантировать уникальность?