SQL 服务器:如何使用更改跟踪列出更改的列?

SQL Server: How to list changed columns with change tracking?

我使用 SQL Server 2012 标准版,并在 table.

上激活了更改跟踪功能

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

的 SYS_CHANGE_COLUMNS 属性
0x0000000045000000460000004700000048000000

我如何知道哪些列已更改?

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

This binary value should not be interpreted directly.

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

对于此用例,请使用 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);  

If CHANGE_TRACKING_IS_COLUMN_IN_MASK tell me if a column has changed, how can I write a script that tell me which columns have changed ? I have around 50 attributes for each table.

恐怕您需要遍历所有您可能感兴趣的列...如果这限制太多,您可能不得不使用另一种更改通知方法,例如 Change Data Capture (CDC),或触发器