Azure Data Factory表达式中保留方括号的正确方法
解决ADF Lookup活动中SQL保留关键字方括号被移除的问题
问题原因
你遇到的方括号被ADF移除的问题,是因为动态字符串拼接时的表达式解析歧义,加上原表达式存在多余的右括号,导致ADF误处理了方括号部分。而使用[[Key]]会让SQL Server收到无效语法,因此报错。
正确解决方案
方案1:修正Replace表达式写法
确保字符串转义正确且无多余符号,方括号会被完整保留:
@replace('SELECT * FROM dbo.MyTable WHERE dbo.[Key] = ''{value}''', '{value}', 'someValue')
注意:单引号在ADF表达式中需要用两个单引号转义,原字符串不要添加多余括号。
方案2:使用Concat函数拼接查询(更直观)
直接拼接字符串各部分,避免Replace的解析歧义:
@concat('SELECT * FROM dbo.MyTable WHERE dbo.[Key] = ''', 'someValue', '''')
这种方式下,方括号作为普通字符串被直接传入SQL Server,不会被ADF修改。
方案3:参数化查询(推荐,安全防注入)
使用ADF的参数化查询功能,彻底避免字符串转义问题:
- 在Lookup活动所在的管道中定义参数(例如
p_keyValue),设置值为someValue - 编写SQL查询语句:
SELECT * FROM dbo.MyTable WHERE dbo.[Key] = ?
- 在Lookup活动的「参数」配置中,将查询中的
?映射到定义的参数@pipeline().parameters.p_keyValue
这种方法不仅解决了方括号的问题,还能防止SQL注入风险,是更规范的做法。
内容的提问来源于stack exchange,提问作者jeancallisti
相关产品推荐
相关产品推荐

