2016-11-18 150 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查看我的答案更新# –