如何知道CDC中哪个列的值发生了变化

时间:2014-12-14 18:37:31

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

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

我正在关注此tutorial

2 个答案:

答案 0 :(得分:1)

我认为你要找的是列跟踪。您需要使用CHANGETABLE功能来获得您想要的效果。

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

有关详细信息,请查看此MSDN article

答案 1 :(得分:0)

更好的选择。这是如何使用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了解详情。