Sql 为cdc中的每个列更改获取单独的行
我创建了一个包含3个字段的简单Employee表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
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命令要求以内联方式指定透视字段的所有值。如果列名称有许多可能的值,则这可能会很困难。您以聚合为中心,例如计数、平均值、最小值、最大值……是否要知道特定列和操作的显示次数?