Я заметил в своем операторе слияния, что в исходной таблице есть строки с PackageId
, равным 0
.Эти записи не должны быть вставлены в таблицу назначения.Поэтому я хотел бы, чтобы это условие было на моей ВСТАВКЕ.
MERGE MyTargetTable AS TARGET
USING MySourceTable AS SOURCE
ON (SOURCE.orderidHash = TARGET.Id)
WHEN MATCHED AND (TARGET.CustomerId <> SOURCE.CustomerId
OR TARGET.PackageId <> SOURCE.packageid
OR TARGET.TypeId <> SOURCE.ordertypeid
OR TARGET.Created <> SOURCE.Created
OR TARGET.Updated <> SOURCE.Changed)
THEN
UPDATE SET TARGET.CustomerId = SOURCE.customeridHash,
TARGET.PackageId = SOURCE.packageid,
TARGET.TypeId = SOURCE.ordertypeid,
TARGET.Created = SOURCE.Created,
TARGET.Updated = SOURCE.Changed
WHEN NOT MATCHED BY TARGET
INSERT (
Id,
CustomerId,
PackageId,
TypeId,
Created,
Updated
)
VALUES (
SOURCE.orderidHash,
SOURCE.customeridHash,
SOURCE.packageid,
SOURCE.ordertypeid,
SOURCE.Created,
SOURCE.changed
)
WHEN NOT MATCHED BY SOURCE THEN DELETE;
Где в приведенном выше утверждении я должен иметь WHERE PackageId <> 0
?Когда я ставлю условие после WHEN NOT MATCHED BY TARGET
, я получаю сообщение об ошибке:
Оператор MERGE конфликтует с ограничением FOREIGN KEY "FK_MyTargetTable_DimCustomer".Конфликт произошел в базе данных MyDatabase, таблица DimCustomer, идентификатор столбца.
MyTargetTable.CustomerId
представляет собой FK для DimCustomer.Id
.