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),或触发器
我使用 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),或触发器