我在Azure ADF中创建了一个管道,用于从源db中的54个表中复制已更改的行。我跟随了Azure的向导。并对其进行修改以支持动态表。
我使用一个查找来获取所有活动的CDC表,然后对每个活动在每个CDC表上执行副本,它运行良好。但是,当我试图在Azure指南中添加Trigger_Start_Time示例代码时,我会得到以下错误:
数据库操作失败,出现以下错误:
‘{’附近不正确的语法。‘ “{”附近不正确的语法。 、SqlErrorNumber=102、Class=15、State=1.
下面是我试图执行的代码的示例:
@concat('DECLARE @begin_time datetime, @end_time datetime, @from_lsn binary(10), @to_lsn binary(10) ;
SET @begin_time = ''',pipeline().parameters.TriggerStartTime,''';
SET @end_time = ''',pipeline().parameters.TriggerEndTime,''';
SET @from_lsn = sys.fn_cdc_map_time_to_lsn(''smallest greater than or equal'', @begin_time);
SET @to_lsn = sys.fn_cdc_map_time_to_lsn(''largest less than or equal'', @end_time);
SELECT count(1) changecount FROM cdc.fn_cdc_get_net_changes_dbo_@{item().Table_Name}(@from_lsn, @to_lsn, ''all'')')我使用@{item().Table_Name}设置表名。如果我硬编码表名为:"Customer“,效果很好。
当我在查询中使用源参数时,我遗漏了什么?
发布于 2021-12-15 12:52:38
当在concat()函数中包含当前项时,将其用作item().Table_Name。
@concat('DECLARE @begin_time datetime, @end_time datetime, @from_lsn binary(10), @to_lsn binary(10) ;
SET @begin_time = ''',pipeline().parameters.TriggerStartTime,''';
SET @end_time = ''',pipeline().parameters.TriggerEndTime,''';
SET @from_lsn = sys.fn_cdc_map_time_to_lsn(''smallest greater than or equal'', @begin_time);
SET @to_lsn = sys.fn_cdc_map_time_to_lsn(''largest less than or equal'', @end_time);
SELECT count(1) changecount FROM cdc.fn_cdc_get_net_changes_dbo_',item().Table_Name,'(@from_lsn, @to_lsn, ''all'')')该查询如下所示,

https://stackoverflow.com/questions/70361100
复制相似问题