2016-11-18 122 views

回答

2

由于列是由所有已更改列的列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告诉我,如果一列已经改变, 我怎么能写一个脚本,告诉我哪列有哪些变化?对于每个表,I 具有大约50个属性。

恐怕你需要遍历所有列,你可能感兴趣的......如果这是过于严格,可能会需要使用另一个变化通知的方式,像Change Data Capture(CDC )或触发器

+0

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

+0

@abreneliere查看我的答案更新# –