如何Dynamicaly列目前,我有以下查询:在UNPIVOT操作
WITH History AS (
SELECT
kz.*,
kz.__$operation AS operation,
map.tran_begin_time as beginT,
map.tran_end_time as endT
FROM cdc.fn_cdc_get_all_changes_dbo_EXT_GeolObject_KategZalezh(sys.fn_cdc_get_min_lsn('dbo_EXT_GeolObject_KategZalezh'), sys.fn_cdc_get_max_lsn(), 'all') AS kz
INNER JOIN [cdc].[lsn_time_mapping] map
ON kz.[__$start_lsn] = map.start_lsn
where kz.GUID_BalanceHC_Zalezh = 'DDA9AB3A-A0AF-4623-9362-0000C8C83D63'
),
UnpivotedValues AS(
SELECT guid, GUID_another, field, val, operation, beginT, endT
FROM History
UNPIVOT ([val] FOR field IN
(
area,
oilwidthmin,
oilwidthmax,
efectivwidthmin,
efectivwidthmax,
etc...
))t
),
UnpivotedWithLastValue AS (
SELECT
*,
--Use LAG() to get the last value for the same field
LAG(val, 1) OVER (PARTITION BY guid, GUID_another, field ORDER BY BeginT) LastVal
FROM UnpivotedValues
)
SELECT * FROM UnpivotedWithLastValue WHERE val <> LastVal OR LastVal IS NULL ORDER BY guid
该查询返回更改后的值对于具有CDC(更改数据捕获)功能的一个表。 我想创建一个存储过程,该过程接收未转义的列,并将cdc函数(例如cdc.fn_cdc_get_all _...)作为参数并返回结果集。
此表格的结果必须加入一个报告中。
在我的情况下,参数1是cdc.fn_cdc_get_all_changes_dbo_EXT_GeolObject_KategZalezh(sys.fn_cdc_get_min_lsn('dbo_EXT_GeolObject_KategZalezh'), sys.fn_cdc_get_max_lsn(), 'all')
。这是CDC的功能。 我应该如何在结果中发送我想要的字段列表?字符串怎么样? 另外,有没有办法做到没有动态SQL?动态SQL它不是更好的性能解决方案。
你能提供您所期望的存储过程来接收(参数)和返回(数据结果集)的概述。 例如该程序是否应该一次在多个CDC表格上工作(即接收表格列表作为参数),还是期望每个CDC表格一次调用该程序? – dybzon