从SQL Server获取值列表并传入Azure Data Factory(ADF)的For Each活动
解决SQL Server单据编号传入ADF For Each活动的问题
方法一:通过Lookup活动直接生成数组
- 使用Lookup活动查询SQL Server表,SQL语句返回单列单据编号:
SELECT DocNumber AS value FROM YourTable - 保持Lookup活动的第一行仅选项关闭(默认状态),确保返回所有行数据。
- 在For Each活动的Items属性中,直接引用Lookup的输出数组:
其中@activity('Lookup_DocNumbers').output.valueLookup_DocNumbers是你的Lookup活动名称,.output.value会直接返回包含所有单据编号的数组(每个元素为{"value": "单据号"}格式的对象),可被For Each直接遍历。
方法二:用存储过程返回数组格式结果
若必须使用存储过程,需让存储过程返回符合ADF要求的JSON数组:
- 编写存储过程时,通过
FOR JSON PATH将查询结果转换为JSON数组:CREATE PROCEDURE GetDocNumbers AS BEGIN SELECT DocNumber AS value FROM YourTable FOR JSON PATH, WITHOUT_ARRAY_WRAPPER END - 在ADF的存储过程活动中执行该存储过程,然后在For Each的Items属性中解析返回的JSON:
其中@json(activity('SP_GetDocNumbers').output.resultSets[0].rows[0][0])SP_GetDocNumbers是存储过程活动名称,通过.resultSets[0].rows[0][0]获取存储过程返回的JSON字符串,再用@json()转换为数组。
注意事项
- 确保Lookup或存储过程返回结果的键名统一(如示例中的
value),遍历For Each时可通过@item().value获取单个单据编号。 - 若存在重复单据编号,可在SQL语句中添加
DISTINCT去重,避免无效重复遍历。
内容的提问来源于stack exchange,提问作者Mayuran Parathalingam
相关产品推荐
相关产品推荐

