我使用SQL Server 2012標準版,並且我在表格上激活了更改跟蹤功能。SQL Server:如何使用更改跟蹤列出更改的列?
當我列出與CHANGETABLE功能表上的變化,我有一個二進制數據
0x0000000045000000460000004700000048000000
一個SYS_CHANGE_COLUMNS財產如何知道哪些列有哪些變化?
我使用SQL Server 2012標準版,並且我在表格上激活了更改跟蹤功能。SQL Server:如何使用更改跟蹤列出更改的列?
當我列出與CHANGETABLE功能表上的變化,我有一個二進制數據
0x0000000045000000460000004700000048000000
一個SYS_CHANGE_COLUMNS財產如何知道哪些列有哪些變化?
由於列是由所有已更改列的列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 )或觸發器
如果CHANGE_TRACKING_IS_COLUMN_IN_MASK告訴我列是否已更改,如何編寫腳本來告訴我哪些列已更改?每桌有大約50個屬性。 – abreneliere
@abreneliere查看我的答案更新# –