如何在Azure Data Factory的Foreach活动中正确引用item()值
Foreach循环内Lookup活动动态SQL正确引用item值语法
错误原因
动态表达式@item().CustomerName被置于单引号包裹的静态字符串内部,数据工厂表达式解析器不会识别硬编码字符串内的@开头动态标记,会将其作为普通文本传递给数据库,触发SQL语法错误。
正确写法
写法1:concat函数拼接(全版本兼容)
将完整SQL语句作为动态表达式,用concat函数拼接固定SQL片段和动态取值,SQL语法要求的单引号需用两个单引号转义:
@concat('SELECT * FROM Customers WHERE CustomerName = ''', item().CustomerName, '''')
当item().CustomerName取值为Tesla时,最终传递给数据库的SQL为:SELECT * FROM Customers WHERE CustomerName = 'Tesla'
写法2:字符串插值(语法更简洁)
支持新版本数据工厂/ Synapse管道,用@{}标记动态取值部分:
@'SELECT * FROM Customers WHERE CustomerName = ''@{item().CustomerName}'''
注意事项
- 上述表达式需完整填写在Lookup活动SQL配置的「动态内容」编辑窗口中,不可直接填写在静态SQL输入框
- 若
CustomerName取值可能包含单引号,需提前对item().CustomerName做单引号转义处理,避免SQL语法错误
内容的提问来源于stack exchange,提问作者Kenny_I
相关产品推荐
相关产品推荐

