我使用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查看我的答案更新# –