如何将ADF中Set Variable的数组输出写入Azure SQL表?
将ADF变量中的目录信息写入Azure SQL表的解决方案
你已经通过ADF管道遍历ADLS目录,将文件夹名称和最后修改日期收集到了名为allFiles的变量中,变量输出格式如下:
{ "name": "allFiles", "value": [ "FileName,LastUpdated", "final_directory1,2024-11-15T10:50:23+00:00", "all_entry_levels,2025-07-11T20:58:34+00:00", "final_directory,2025-07-11T21:01:38+00:00", "groceries_list,2025-07-11T21:04:44+00:00", "all_onetime_records,2025-07-11T21:04:58+00:00", "industries_list,2025-07-11T21:05:11+00:00", "SNAPSHOT_last,2025-07-11T21:05:25+00:00", "LATEST_information_farming,2025-07-11T21:05:38+00:00" ] }
以下是两种可行的写入Azure SQL表的方法:
方法一:使用复制活动
预处理变量数据
- 添加Filter活动,过滤掉数组中的表头元素,过滤条件设为
@not(equals(item(), 'FileName,LastUpdated')),输出为仅包含数据行的数组。 - 添加For Each活动,遍历Filter后的数组,在活动内部添加Append Variable活动,将每个CSV格式的字符串转换为结构化对象,值设为:
将结果存入新的变量(如{ "FileName": "@split(item(), ',')[0]", "LastUpdated": "@split(item(), ',')[1]" }structuredData),最终得到结构化对象数组。
- 添加Filter活动,过滤掉数组中的表头元素,过滤条件设为
配置复制活动源
- 源数据集选择JSON类型,使用内联数据集,在源设置中选择变量作为数据源,指定值为
@variables('structuredData')。
- 源数据集选择JSON类型,使用内联数据集,在源设置中选择变量作为数据源,指定值为
配置列映射
- 在复制活动的「映射」标签页,将JSON对象的
FileName和LastUpdated字段直接映射到Azure SQL表的对应列,确保SQL表字段类型匹配(LastUpdated建议用datetimeoffset类型)。
- 在复制活动的「映射」标签页,将JSON对象的
方法二:使用存储过程活动
创建SQL表类型和存储过程
先在Azure SQL数据库中创建自定义表类型和存储过程:-- 创建自定义表类型 CREATE TYPE DirectoryInfoType AS TABLE ( FileName NVARCHAR(255), LastUpdated DATETIMEOFFSET ); -- 创建存储过程 CREATE PROCEDURE InsertDirectoryInfo @DirectoryInfo DirectoryInfoType READONLY AS BEGIN SET NOCOUNT ON; INSERT INTO YourTargetTableName (FileName, LastUpdated) SELECT FileName, LastUpdated FROM @DirectoryInfo; END;替换
YourTargetTableName为实际的SQL表名。预处理变量数据
同方法一的步骤1,将allFiles变量转换为结构化对象数组structuredData。配置存储过程活动
- 连接到目标Azure SQL数据库,选择创建好的存储过程
InsertDirectoryInfo。 - 在参数配置中,添加表值参数,参数名设为
@DirectoryInfo,类型选择DirectoryInfoType,值设置为@variables('structuredData')。
- 连接到目标Azure SQL数据库,选择创建好的存储过程
常见问题排查
- 若存储过程无数据写入:检查表值参数的结构是否与自定义表类型匹配,查看ADF活动的输出日志确认参数传递是否正确。
- 若复制活动映射失败:确保结构化数组的字段名与SQL表列名一致,或在映射中手动匹配字段。
内容的提问来源于stack exchange,提问作者Ifeanyi
相关产品推荐
相关产品推荐

