I am working on a data synchronization application. We decided to use CDC instead of CT, because we need more information, but at the same time we need a function that returns a column that changes it to something like this, using CT:
SELECT CTTable.SYS_CHANGE_OPERATION, [FNameCh] = CHANGE_TRACKING_IS_COLUMN_IN_MASK(COLUMNPROPERTY(OBJECT_ID('CONTACT_TABLE'), 'contact_name', 'ColumnId'), SYS_CHANGE_COLUMNS), [LNameCh] = CHANGE_TRACKING_IS_COLUMN_IN_MASK(COLUMNPROPERTY(OBJECT_ID('CONTACT_TABLE'), 'contact_lastname', 'ColumnId'), SYS_CHANGE_COLUMNS), FROM CHANGETABLE (CHANGES Contacts, @VersionId) AS CTTable LEFT OUTER JOIN Contacts AS C ON C.CONTACT_ID = CTTable.CONTACT_ID GO
EDIT:
SELECT * , sys.fn_cdc_has_column_changed ('dbo_CONTACT_TABLE', 'contact_name', __$update_mask) AS FNameCh From cdc.fn_cdc_get_all_changes_dbo_CONTACT_TABLE(@Start_Lsn,@End_Lsn,'all') which 1 for if the contact_name is changed and 0 if is not.
thanks
source share