ADF如何获取Lookup活动全部TRGT_VAL值用于查询WHERE IN子句
解决方法
你当前的写法仅取到了返回数组的第一个元素(下标为0的元素),所以只能拿到第一个TRGT_VAL的值,按照以下方案修改表达式即可拿到完整值列表:
场景1:TRGT_VAL为数值类型(IN子句不需要单引号)
用select函数提取数组中所有TRGT_VAL属性,再用join函数拼接为逗号分隔的字符串,最终组合成完整SQL即可:
@concat('SELECT * FROM table WHERE column in (', join(select(activity('Get_ID').output.value, item().TRGT_VAL), ','), ')')
拼接后最终生成的SQL为:
SELECT * FROM table WHERE column in (10000,52000)
场景2:TRGT_VAL为字符串类型(IN子句需要单引号包裹值)
提取TRGT_VAL时额外拼接单引号即可(ADF表达式中单引号用两个单引号转义):
@concat('SELECT * FROM table WHERE column in (', join(select(activity('Get_ID').output.value, concat('''', item().TRGT_VAL, '''')), ','), ')')
拼接后最终生成的SQL为:
SELECT * FROM table WHERE column in ('10000','52000')
可选优化:处理空返回异常
如果Lookup活动可能返回0条结果,可以加逻辑判断避免IN子句为空导致SQL语法错误:
@if( activity('Get_ID').output.count > 0, concat('SELECT * FROM table WHERE column in (', join(select(activity('Get_ID').output.value, item().TRGT_VAL), ','), ')'), 'SELECT * FROM table WHERE 1=2' )
内容的提问来源于stack exchange,提问作者Luiz Viola
相关产品推荐
相关产品推荐

