【问题标题】:SQL Server: How to list changed columns with change tracking?SQL Server:如何使用更改跟踪列出更改的列?
【发布时间】:2016-11-18 10:02:55
【问题描述】:

我使用的是 SQL Server 2012 标准版,并且我在一个表上激活了更改跟踪功能。

当我使用 CHANGETABLE 函数列出表上的更改时,我有一个带有二进制数据的 SYS_CHANGE_COLUMNS 属性

0x0000000045000000460000004700000048000000

我如何知道哪些列发生了变化?

【问题讨论】:

    标签: sql-server change-tracking


    【解决方案1】:

    因为列是由所有已更改列的列 ID 组成的位掩码,所以很难知道它是由什么组成的。其实MSDN说这里不要直接询问SYS_CHANGE_COLUMNS:https://msdn.microsoft.com/en-us/library/bb934145.aspx

    不应直接解释此二进制值。

    但是,当您为了通知目的而检测更改时,通知使用者通常很清楚他们有兴趣更改哪些列。

    对于这个用例,使用CHANGE_TRACKING_IS_COLUMN_IN_MASK 函数。

    -- Get the column ID of my column
    declare @MyColumnId int
    set @MyColumnId = columnproperty(object_id('MyTable'), 'MyColumn', 'ColumnId')
    
    -- Check if it's changed
    declare @MyColumnHasChanged bit
    set @MyColumnHasChanged = CHANGE_TRACKING_IS_COLUMN_IN_MASK (MyColumnId, @change_columns_bitmask);  
    

    如果 CHANGE_TRACKING_IS_COLUMN_IN_MASK 告诉我列是否已更改, 如何编写一个脚本来告诉我哪些列已更改?一世 每个表有大约 50 个属性。

    恐怕您需要遍历所有您可能感兴趣的列...如果这过于严格,您可能必须使用另一种更改通知方法,例如 Change Data Capture (CDC) , 或触发器

    【讨论】:

    • 如果 CHANGE_TRACKING_IS_COLUMN_IN_MASK 告诉我列是否已更改,我如何编写脚本来告诉我哪些列已更改?每个表都有大约 50 个属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多