1

我正在使用以下(长)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 期间实际完成的所有工作都在幕后进行。我想跟踪参与此查询的所有列和值。

我有什么方法可以捕获这些数据吗?

4

1 回答 1

1

我相信在这里使用 T-SQL MERGE 语句的缺点是你会掩盖实际发生的事情,因此引入日志记录可能需要重复工作。

只是我的想法,但你似乎在这里重新发明了一点轮子。

SQL Server Integration Services (SSIS) 为这些确切的处理要求提供了预构建的组件。

例如,您可以使用现有的渐变维度转换组件,或者您可以使用许多较低级别的组件来实现您自己的自定义解决方案,但随后合并日志记录。

于 2009-07-29T06:29:23.857 回答