Sql 为cdc中的每个列更改获取单独的行

Sql 为cdc中的每个列更改获取单独的行,sql,sql-server,pivot,Sql,Sql Server,Pivot,我创建了一个包含3个字段的简单Employee表 FirstName , LastName , CurrentPayScale 这就是我到目前为止所做的 DECLARE @begin_lsn BINARY(10), @end_lsn BINARY(10) , @A NVARCHAR(100) SET @begin_lsn = sys.fn_cdc_get_min_lsn('dbo_Employee') SET @end_lsn = sys.fn_cdc_get_max_lsn() SELEC

我创建了一个包含3个字段的简单Employee表

FirstName , LastName , CurrentPayScale
这就是我到目前为止所做的

DECLARE @begin_lsn BINARY(10), @end_lsn BINARY(10) , @A NVARCHAR(100)
SET @begin_lsn = sys.fn_cdc_get_min_lsn('dbo_Employee')
SET @end_lsn = sys.fn_cdc_get_max_lsn()

SELECT  __$operation AS OperationTypeId,
   CASE __$operation WHEN 1 THEN 'has deleted' WHEN 2 THEN 'has added' ELSE 'has updated' END AS [Action],
   ( 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_Employee' 
       AND sys.fn_cdc_is_bit_set(CC.column_ordinal,    EmployeeCDC.__$update_mask) = 1
    FOR XML PATH('')) AS ChangedColumns,
   (SELECT FIRSTNAME + ','
    FROM [cdc].[dbo_Employee_CT]
    WHERE __$start_lsn = EmployeeCDC.__$start_lsn 
      AND __$operation = 3 FOR XML PATH('')) as 'Old Value',
    EmployeeCDC.FirstName  AS 'New Value'
 FROM [cdc].[dbo_Employee_CT] AS EmployeeCDC 
 WHERE EmployeeCDC.__$operation <> 3
此查询返回此结果

现在在第三行中,您可以看到两列被更改为FirstName和CurrentPayScale


我只想查看每一列的结果,我认为就我所搜索的而言,可以使用pivot完成,但我也不知道如何使用pivot。

您需要取消对更改的列的设置,以便对数据进行有效的透视。此外,pivot命令要求以内联方式指定透视字段的所有值。如果列名称有许多可能的值,则这可能会很困难。您以聚合为中心,例如计数、平均值、最小值、最大值……是否要知道特定列和操作的显示次数?