--First SP will
collect the information with respect to columns during DML operation.
CREATE Procedure [cdc].[columntracking]   
(  
@TableName VarChar(100)    
)  
AS begin  
Declare @SQL1 VarChar(1000)  
Declare @Join1 VarChar(1000)  
Declare @Join2 VarChar(1000)  
SELECT @SQL1='select [__$update_mask]
,  
        ( SELECT    CC.column_name +'',''  
          FROM      cdc.captured_columns CC  
                    INNER JOIN
cdc.change_tables CT ON CC.[object_id] = CT.[object_id]  
          WHERE     capture_instance = ''dbo_'  
 select  @Join1='''  
          AND
sys.fn_cdc_is_bit_set(CC.column_ordinal, 
                                             
PD.__$update_mask) = 1  
        FOR 
          XML PATH('''')  
        ) AS changedcolumns  
FROM    cdc.dbo_'  
select  @Join2='_CT PD'  
select @SQL1=@SQL1+@TableName+@Join1+@TableName+@Join2  
Exec ( @SQL1)  
End   
Go
--Second SP will
give us detailed information such as Time,DML operation,LSN,Translated
update_mask known as columnchanged  etc
for auditing purposes. 
Create Procedure [cdc].[CDCAuditing]     
(    
@TableName VarChar(100)      
)    
AS begin   
create table #columntracking 
(  
updatemask varchar(1000),  
columnchanged varchar(max)  
)  
Insert
#columntracking  
Exec [cdc].[columntracking] @TableName  
Declare @SQL VarChar(1000)    
Declare @Join varchar(1000)     
SELECT @SQL = 'SELECT
distinct(TM.tran_begin_time ) ,   
      case [__$operation]    
      when 1 Then ''Delete''    
      when 2 Then ''Insert''    
      when 3 Then ''Before update''    
      when 4 Then ''After update''    
      End as [__$operation]    
      ,TM.tran_begin_time    
      ,TM.tran_end_time    
      ,M.[__$update_mask]  
      ,CT.columnchanged  
      ,M.*  
  FROM [cdc].[dbo_'    
select @join= '_CT] as M inner join
cdc.lsn_time_mapping as TM   
on  TM.start_lsn=M.[__$start_lsn]  
Left outer join
#columntracking as CT  
on
CT.updatemask=M.[__$update_mask] order by TM.tran_begin_time ,M.__$operation'    
SELECT @SQL = @SQL + @TableName +@join    
Exec ( @SQL)    
End   
 
No comments:
Post a Comment