簡體   English   中英

帶有條件 INSERT 的合並語句

[英]Merge statement with a conditional INSERT

我在合並語句中注意到源表中有PackageId0 這些記錄不應插入到目標表中。 所以我想在我的 INSERT 上有這個條件。

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、列 Id。

MyTargetTable.CustomerIdDimCustomer.Id的 FK。

只是改變

USING MySourceTable AS SOURCE
to
using (select * from MySourceTable where  PackageId <> 0) as Source 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM