我正在使用以下(长)SQL 语句修改类型 2 维度:
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 和 INSERT 中使用的 OUTPUT 期间实际完成的所有工作都在幕后进行。我想跟踪参与此查询的所有列和值。
我有什么方法可以捕获这些数据吗?