Оператор слияния с условной вставкой - PullRequest
0 голосов
/ 21 февраля 2019

Я заметил в своем операторе слияния, что в исходной таблице есть строки с 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.

1 Ответ

0 голосов
/ 21 февраля 2019

просто поменяйте

USING MySourceTable AS SOURCE
to
using (select * from MySourceTable where  PackageId <> 0) as Source 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...