【问题标题】:Tracking what the MERGE command and its OUTPUT did跟踪 MERGE 命令及其 OUTPUT 做了什么
【发布时间】:2010-11-14 22:05:46
【问题描述】:

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

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

【问题讨论】:

    标签: sql-server merge data-warehouse etl type-2-dimension


    【解决方案1】:

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

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

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

    例如,您可以使用现有的 Slowly Changing Dimension Transformation 组件,或者您可以使用一些较低级别的组件来实现您自己的自定义解决方案,但随后合并日志记录。

    【讨论】:

    猜你喜欢
    • 2022-01-10
    • 2018-08-28
    • 2012-07-10
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    相关资源
    最近更新 更多