如何在SSIS中加载Excel指定区域数据并提取单个单元格值至SQL Server表
解决方案:加载Excel区域数据并提取指定单元格日期值
方法一:分步提取日期变量,再加载数据
- 先提取
A3单元格的日期值存入变量
DECLARE @TargetDate DATE; SELECT @TargetDate = [F1] FROM OPENROWSET( 'Microsoft.ACE.OLEDB.12.0', 'Excel 12.0 Xml;HDR=NO;Database=C:\你的文件路径\你的Excel文件.xlsx', 'SELECT * FROM [sheet1$A3:A3]' );
说明:
HDR=NO表示不将第一行作为表头,[F1]是该单元格的默认列名
- 加载
A5:Ad区域数据,同时将日期值插入新增列
-- 假设目标表已创建,且新增了TargetDate列 INSERT INTO 你的SQL目标表 (列1, 列2, ..., TargetDate) SELECT *, @TargetDate FROM OPENROWSET( 'Microsoft.ACE.OLEDB.12.0', 'Excel 12.0 Xml;HDR=YES;Database=C:\你的文件路径\你的Excel文件.xlsx', 'SELECT * FROM [sheet1$A5:Ad]' );
说明:如果
A5不是数据表头,将HDR=YES改为HDR=NO,用F1,F2...指代各列
方法二:用CTE一次性合并两个查询
无需单独声明变量,通过CTE提取日期后直接关联数据:
WITH ExcelHeaderDate AS ( SELECT [F1] AS TargetDate FROM OPENROWSET( 'Microsoft.ACE.OLEDB.12.0', 'Excel 12.0 Xml;HDR=NO;Database=C:\你的文件路径\你的Excel文件.xlsx', 'SELECT * FROM [sheet1$A3:A3]' ) ) INSERT INTO 你的SQL目标表 (列1, 列2, ..., TargetDate) SELECT excel_data.*, header_date.TargetDate FROM OPENROWSET( 'Microsoft.ACE.OLEDB.12.0', 'Excel 12.0 Xml;HDR=YES;Database=C:\你的文件路径\你的Excel文件.xlsx', 'SELECT * FROM [sheet1$A5:Ad]' ) excel_data CROSS JOIN ExcelHeaderDate header_date;
注意事项
- 确保SQL Server服务账号拥有Excel文件所在目录的读写权限
- 安装与SQL Server位数匹配的ACE驱动(32位/64位),旧版
.xls文件需将连接字符串改为Excel 8.0;HDR=... - 若日期格式识别异常,可通过
CONVERT(DATE, [F1], 日期格式代码)强制转换
内容的提问来源于stack exchange,提问作者Suji
相关产品推荐
相关产品推荐

