首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SCD类型2使用SQL Server合并,如何捕获计数?

SCD类型2使用SQL Server合并,如何捕获计数?
EN

Stack Overflow用户
提问于 2015-02-13 04:23:40
回答 1查看 1.2K关注 0票数 1

新入门的SQL Server和合并。

我正在编写一条MERGE语句来填充一个缓慢变化的维度表。我的示例包括类型1和类型2属性。我看到了如何使用OUTPUT捕获操作计数的示例,并且了解了如何使用OUTPUT将值传递给INSERT语句。我想要做的是采用以下代码,并以某种方式捕获更新和插入操作的计数,以便进行审计/日志记录。

非常困惑地阅读关于输出和输出的文章,但根据我所能说的,我认为我不能做我想做的事情,至少不使用输出。

有没有一种方法可以从下面的语句中捕获操作计数?有没有更好的方法来实现这一点?

谢谢

代码语言:javascript
复制
BEGIN

 MERGE dbo.dimTable tgt
 USING dbo.stgTable src
     ON tgt.NaturalKey = src.NaturalKey
     AND tgt.IsActiveRow = 'Y'
 WHEN MATCHED
     AND EXISTS 
     (SELECT src.SCD1Field
         EXCEPT 
      SELECT tgt.SCD1Field
         )
    THEN
         UPDATE SET
             tgt.SCD1Field = src.SCD1Field ;

 INSERT dbo.dimTable (
       tgt.NaturalKey
     , tgt.SCD1Field
     , tgt.SCD2Field    
     , tgt.RowStartDate
     , tgt.RowEndDate
     , tgt.IsActiveRow
     )
SELECT
     NaturalKey
     , SCD1Field
     , SCD2Field
     , RowStartDate
     , RowEndDate
     , IsActiveRow
 FROM (
     MERGE dbo.dimTable tgt
     USING dbo.stgTable src
         ON tgt.NaturalKey = src.NaturalKey
     WHEN NOT MATCHED BY TARGET
     THEN
         INSERT (
         NaturalKey
         , SCD1Field
         , SCD2Field
         , RowStartDate
         , RowEndDate
         , IsActiveRow
         )
         VALUES (
         src.NaturalKey
         , src.SCD1Field
         , src.SCD2Field
         , GETDATE()
         , NULL
         , 'Y'
         )
     WHEN MATCHED
         AND tgt.IsActiveRow = 'Y'
         AND EXISTS 
            (
         SELECT src.SCD2Field
         EXCEPT 
         SELECT tgt.SCD2Field
             )
             THEN
                 UPDATE
                 SET IsActiveRow = 'N'
                     , RowEndDate = DATEADD(dd,-1,GETDATE())
     OUTPUT $ACTION Action_Out
         , src.NaturalKey
         , src.SCD1Field
         , src.SCD2Field
         , GETDATE() RowStartDate
         , NULL RowEndDate
         , 'Y' IsActiveRow
     )m
 WHERE m.Action_Out = 'UPDATE'
 END ;
EN

回答 1

Stack Overflow用户

发布于 2015-03-04 18:55:39

不幸的是,MERGE命令本身并不提供捕获操作计数的方法。

但是,假设您有某种审计关键字或日期列,可以用来将结果与最近的执行分开,那么您可以做的是添加另一个步骤,对您要记录的表中的操作结果进行计数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28487074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档