如何在SSIS中创建变量适配动态月度Excel文件名并导入数据至SQL表
SSIS动态读取月份命名Excel文件并创建对应表的变量配置方案
1. 创建包级核心变量
所有变量均设为包级作用域,按需调整默认值:
SourceFolder:字符串类型,赋值为Excel文件存储的根目录,例:D:\月度业务报表\CurrentFileName:字符串类型,默认值留空,用于存储循环读取到的单个Excel文件名(带后缀),例:Jun file.xlsxCurrentTableName:字符串类型,默认值留空,通过表达式自动截取文件名作为表名,表达式填写:LEFT(@[User::CurrentFileName], FINDSTRING(@[User::CurrentFileName], ".xlsx", 1) - 1)
若文件为xls后缀,将表达式中的.xlsx替换为.xls即可ExcelConnStr:字符串类型,通过表达式生成动态Excel连接串,xlsx格式对应表达式:"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + @[User::SourceFolder] + @[User::CurrentFileName] + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\";"CreateTableSql:字符串类型,通过表达式生成动态建表语句,表名带空格需用方括号包裹,假设Excel固定列结构为交易日期、销售额、备注,表达式示例:"IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = N'" + @[User::CurrentTableName] + "') CREATE TABLE [" + @[User::CurrentTableName] + "] (交易日期 DATETIME, 销售额 DECIMAL(18,2), 备注 NVARCHAR(200))"
若列结构每月变动,可搭配脚本任务读取Excel Schema动态生成该语句
2. 配置Foreach循环容器
- 枚举器选择「Foreach 文件枚举器」,枚举路径绑定变量
@[User::SourceFolder],文件筛选填*.xlsx(按需调整后缀),检索文件类型选择「仅文件名」 - 变量映射页签,将索引0的返回值映射到变量
@[User::CurrentFileName]
3. 配置动态连接管理器
- 先创建一个临时Excel连接管理器,任选一个同格式Excel文件调通连接,右键打开属性面板,找到「表达式」选项,给
ConnectionString属性绑定变量@[User::ExcelConnStr],同时将该连接管理器的DelayValidation属性设为True,避免设计阶段验证报错 - SQL Server连接管理器正常配置即可
4. 容器内任务配置
在Foreach循环容器内依次添加以下任务,所有任务的DelayValidation属性均设为True:
- 执行SQL任务:SQL语句来源选择变量,绑定变量
@[User::CreateTableSql],用于提前创建对应月份的表 - 数据流任务:源选择配置好的动态Excel连接,目标选择SQL Server连接,目标表访问模式选「变量中的表名或视图名」,绑定变量
@[User::CurrentTableName],按需映射列即可
提示:如果需要避免重复导入已经处理过的文件,可以额外新增一个已处理文件记录表,每次循环先判断文件名是否已存在于记录表中,不存在再执行导入逻辑。
内容的提问来源于stack exchange,提问作者karaode
相关产品推荐
相关产品推荐

