Я модифицирование измерения типа 2, используя следующее (длинное) SQL заявления:Tracking, что команда MERGE и ее ВЫВОД сделали
INSERT INTO AtlasDataWarehouseReports.District
(
Col01,
Col02,
Col03,
Col04,
Col05,
Col06,
Col07,
Col08,
Col09,
Col10,
StartDateTime,
EndDateTime
)
SELECT
Col01,
Col02,
Col03,
Col04,
Col05,
Col06,
Col07,
Col08,
Col09,
Col10,
CONVERT (DATETIME, CONVERT (Varchar, GetDate(), 101)) AS StartDateTime,
NULL AS EndDateTime
FROM
(
MERGE AtlasDataWarehouseReports.District AS MergeTarget
USING Staging.District as MergeSource
ON MergeTarget.Col01 = MergeSource.Col01
AND MergeTarget.EndDateTime IS NULL
WHEN MATCHED
AND (
MergeTarget.Col02 <> MergeSource.Col02
OR MergeTarget.Col05 <> MergeSource.Col05
)
THEN
UPDATE SET MergeTarget.EndDateTime = CONVERT (DATETIME, CONVERT (Varchar, GetDate(), 101))
WHEN NOT MATCHED
THEN
INSERT
(
Col01,
Col02,
Col03,
Col04,
Col05,
Col06,
Col07,
Col08,
Col09,
Col10,
StartDateTime,
EndDateTime
)
VALUES
(
MergeSource.Col01,
MergeSource.Col02,
MergeSource.Col03,
MergeSource.Col04,
MergeSource.Col05,
MergeSource.Col06,
MergeSource.Col07,
MergeSource.Col08,
MergeSource.Col09,
MergeSource.Col10,
CONVERT (DATETIME, CONVERT (Varchar, GetDate(), 101)),
NULL
)
OUTPUT $Action as MergeAction, MergeSource.*
) AS MergeOutput
WHERE 1=1
AND MergeOutput.MergeAction = 'UPDATE';
Я бег это как часть ETL, которая загружает мое хранилище данных , Я хочу создать подробную систему регистрации, которая может отслеживать все изменения в таблице журналов/файлах и т. Д.
Все работы, которые фактически выполняются во время MERGE и OUTPUT, используемые в INSERT, находятся за сцены. Я хочу отслеживать все столбцы и значения, которые участвовали в этом запросе.
Есть ли способ захватить эти данные?
@ Джон Сансом: Я пропустил вас несколько недель назад! http://stackoverflow.com/questions/1132078/upsert-in-ssis. Теперь я создал всю вещь в хранимых процедурах, вызванных из SSIS. Я запустил мастера. Единственное, что мне не понравилось, это ремонтопригодность пакета SSIS. Он использует команды OLEDB для этого, и Microsoft рояльно искажает имена параметров для объекта команды OLEDB с параметрами Param_0, Param_1. Я спросил об этом здесь http://stackoverflow.com/questions/1137355/alias-parameters-in-ssis. До сих пор у меня было 15 размерных размеров Type2, которые используют MERGE. –