Дата и время слияния служб SSIS не обновляются

Я использую заявление о слиянии в моем пакете служб SSIS. Проблема в том, что он не обновляет столбец datetime при запуске пакета. Он вставляет дату и время правильно, но не обновляет их с NULL до некоторого времени, если в исходной базе данных доступно новое время. И источник, и пункт назначения имеют одинаковый тип столбца (datetime(2),null). Я использую код ниже в задаче SQL после усечения промежуточной таблицы.

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

1 ответ

Решение

У вас есть запятая, которой не должно быть в начале этой строки:

,targe.schedule_datetime=sourc.schedule_datetime

Кроме того, вам нужно добавить это, чтобы заботиться о NULL:

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 в основном неизвестны, поэтому они не могут быть оценены как "равно" или "не равно".

Другие вопросы по тегам