2017-09-18 7 views
1

私はSSISパッケージでMerge Statementを使用しています。問題は、パッケージを実行するときにdatetime列を更新しないということです。 datetimeは正しく挿入されますが、新しいdatetimeがソースデータベースで使用可能な場合はNULLからsome datetimeに更新されません。 ソースと宛先の両方に同じ列タイプ(datetime(2)、null)があります。 ステージングテーブルを切り捨てた後、SQLタスクで以下のコードを使用しています。SSIS Merge Statment日時が更新されない

MERGE abc.dbo.invoices AS targe 

USING (SELECT 

    ID  
    ,cash_received_date 
    ,schedule_datetime 
    ,delivery_date 

FROM Staging.dbo.tmpabcinvoices) AS sourc 
ON targe.id = sourc.id 
WHEN MATCHED and 
targe.schedule_datetime <> sourc.schedule_datetime 
or 
targe.delivery_date <> sourc.delivery_date 
or 
targe.cash_received_date <> sourc.cash_received_date 

THEN UPDATE SET 
,targe.schedule_datetime=sourc.schedule_datetime 
,targe.delivery_date=sourc.delivery_date 
,targe.cash_received_date=sourc.cash_received_date 

WHEN NOT MATCHED THEN 
INSERT(

     old_invoiceid   
     ,cash_received_date 
     ,schedule_datetime 
     ,delivery_date 

) 
VALUES 
(

     sourc.old_invoiceid 
     ,sourc.cash_received_date 
     ,sourc.schedule_datetime 
     ,sourc.delivery_date 

); 
GO 

答えて

2

あなたはこの行の先頭であってはならないコンマを持っている:

,targe.schedule_datetime=sourc.schedule_datetime 

また、あなたはヌルの世話をするためにこれを追加する必要があります:

targe.schedule_datetime <> sourc.schedule_datetime 
or (targe.schedule_datetime IS NULL AND sourc.schedule_datetime IS NOT NULL) 
or targe.delivery_date <> sourc.delivery_date 
or (targe.delivery_date IS NULL AND sourc.delivery_date IS NOT NULL) 
or targe.cash_received_date <> sourc.cash_received_date 
or (targe.cash_received_date IS NULL AND sourc.cash_received_date IS NOT NULL) 

ANSI_NULLSはONに設定されていますが、NULLは基本的には未知であるため、「等しい」または「等しくない」のいずれかに評価することはできません。

+0

ありがとうございました。 – Mehak

関連する問題