ADF中ForEach内Script Activity执行存储过程报@item未声明错误
解决方案
问题根源
Script Activity的SQL脚本输入框中,若直接写入EXEC @item().StoredProcedure_1,ADF会将@item()视为SQL语句的一部分,而非ADF的动态表达式,导致SQL引擎识别@item为未声明的标量变量,触发报错。
解决步骤
方法1:动态拼接完整执行语句
直接通过ADF动态内容生成合法的存储过程执行语句:
- 进入Script Activity的脚本配置界面
- 清空默认的SQL脚本内容
- 点击脚本输入框右侧的「添加动态内容」按钮
- 输入以下表达式:
该表达式会先解析@concat('EXEC ', item().StoredProcedure_1)item().StoredProcedure_1获取控制表中存储的存储过程名称,再拼接成EXEC 存储过程名的合法SQL语句,传递给SQL引擎执行。
方法2:带参数的存储过程执行(扩展场景)
如果存储过程需要传入控制表中的其他参数(如SchemaName、TableName),通过表达式拼接完整语句(注意字符串参数需用单引号转义):
@concat('EXEC ', item().StoredProcedure_1, ' ''', item().SchemaName, ''', ''', item().TableName, '''')
验证
配置完成后,测试运行ForEach管道,确认Script Activity可正常读取控制表中的存储过程并执行。
内容的提问来源于stack exchange,提问作者user2370668
相关产品推荐
相关产品推荐

