所以我有一个相对简单的 SSIS 工作,它执行以下操作:
执行 SQL 任务 - Excel 文件中的拖放表
drop table `Table`
执行 SQL 任务 - 在 Excel 文件中创建工作表
CREATE TABLE `Table` (
`Col1` VarChar (255) ,
`Col2` Long ,
`Col3` VarChar (84) ,
`Col4` VarChar (60) ,
`Col5` VarChar (255) ,
`Col6` VarChar (20) ,
`Col7` VarChar (255) ,
`Col8` VarChar (255) ,
`Col9` VarChar(255))
数据流任务 - 将数据从 SQL 导出到 Excel
这只是运行 SQL 查询 [OLE DB 源],将所有内容转换为 unicode 字符串,并将数据导出到 Excel 目标。
注意:此作业在 BIDS 2005 中完美执行,没有错误。但是,当我最初尝试在 BIDS 2008(32 位模式)中运行它时,我在上面提到的 Drop Sheet 和 Create Sheet Execute SQL Tasks上都收到以下错误:
警告:多步 OLE DB 操作产生错误。检查每个 OLE DB 状态值(如果可用)。没有做任何工作。
我发现我可以通过将Execute SQL Tasks的ConnectionType属性更改为ADO并使用以下连接字符串来解决此问题:
Data Source=\\<filelocation>\<ExcelFileName>.xls;Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 8.0;
此时,我回到了在 BIDS 2008 中执行的包,没有任何错误。一切运行良好!
然后我尝试将作业从导出到 Excel 97-2003 .xls 文件更新为导出到 Excel 2007 .xlsx 文件。
因此,根据 Microsoft,我必须更改我的Execute SQL Tasks以使用以下连接字符串:
Data Source=\\<filelocation>\<ExcelFileName>.xlsx;Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 XML;
我还必须将我的Excel 目标步骤的连接管理器(它支持 Microsoft BIDS 2008 中的 Excel 2007 格式)更新为以下内容:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\<file location>\<Excel filename.xlsx;Extended Properties="Excel 12.0 XML;HDR=YES";
所以在这一点上,所有的连接都测试良好,一切看起来都应该可以工作。但是,当我执行包时,我遇到了以下问题。
- Drop Sheet Execute SQL Task 根据 BIDS 成功完成。但是,它实际上不再将工作表放入 Excel 文件中。它确实删除了工作表中包含的所有数据。
- 由于#1,创建工作表执行 SQL 任务失败,因为工作表实际上从未被丢弃。
任何想法为什么这不再起作用?老实说,我已经查看了整个互联网和 SO,但我还没有看到有人解释如何做到这一点。是否有一些新命令可以在 Excel 2007 中删除工作表?