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