【问题标题】:How to know which column's value is changed in CDC如何知道 CDC 中哪一列的值发生了变化
【发布时间】:2014-12-14 18:37:30
【问题描述】:

我在 sql 2012 中使用 CDC 功能,假设我有一个表名为 Employee 并且其中还有一些记录。假设有人更改了员工表中的Last Name。然后在 CDC 表中有 2 个条目,在更改前和更改后都有记录。我想知道哪一栏被改了。

我正在关注这个tutorial

【问题讨论】:

    标签: sql sql-server database change-data-capture


    【解决方案1】:

    我认为您正在寻找的是列跟踪。您需要利用 CHANGETABLE 功能来获得您想要的东西。

    列跟踪信息显示在 CHANGETABLE(CHANGES ...) 函数返回的 SYS_CHANGE_COLUMNS 列中。

    查看MSDN article 了解更多信息。

    【讨论】:

      【解决方案2】:

      更好的选择。这是如何使用 CDC 函数判断 LastName 值是否已更改

              SELECT 
              sys.fn_cdc_map_lsn_to_time(x.__$start_lsn) AS ChangeDateTime
          ,   x.__$start_lsn
          ,   x.__$operation
          ,   x.__$update_mask
          ,   x.YourPrimaryKeyColumn
          ,   x.LastName
          ,   sys.fn_cdc_has_column_changed ('YourCDCInstanceName', 'LastName', x.__$update_mask) LastNameHasChanged
          FROM cdc.fn_cdc_get_all_changes_YourCDCInstanceName(@from_lsn, @to_lsn, N'all') x
      

      查看documentation 了解更多信息。

      【讨论】:

      • 鼓励发布指向其他资源的链接,但您还应该在帖子中包含来自该外部资源的相关信息(解释为什么这是正确答案)的信息或除此以外。请查看This meta post 了解更多关于为什么这通常被不赞成并被视为离题的原因。
      猜你喜欢
      • 1970-01-01
      • 2017-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-06
      • 1970-01-01
      • 1970-01-01
      • 2019-09-14
      相关资源
      最近更新 更多