gpt4 book ai didi

sql-server - 如何将SQL表中的数据导出到SSIS中的多个Excel文件?

转载 作者:行者123 更新时间:2023-12-02 16:38:50 28 4
gpt4 key购买 nike

我创建了一个 SSIS 包,它从 SQL 中提取数据并将其加载到 Excel 中。我在使这个包动态化并将数据加载到多个 Excel 文件中时遇到问题。

我首先创建了一个执行 SQL 任务,该任务使用 SQL 代码保存所有文件名:SELECT FileName FROM Files,其结果集将存储在变量 FileNameObj 中。然后我创建了一个 Foreach 循环容器并在其中添加了一个数据流任务。

Foreach 循环容器设置: Foreach ADO 枚举器、ADO 对象源变量 - FileNameObj、变量映射 - FileName 和索引 - 0。数据流任务中,我添加了 OLE DB 源和 Excel 目标,指向文件路径: C:\Test\ABC.xlsx

这是连接管理器属性:

ConnectionString:Provider=Microsoft.ACE.OLEDB.12.0;数据源=C:\Test\ABC.xlsx;扩展属性=“Excel 12.0;HDR=YES”;

DelayValidation 设置为 True

ExcelFilePathC:\Test\ABC.xlsx

然后我使用属性 ExcelFilePath 和表达式创建了一个表达式:"C:\\Test\\"+ @[User::FileName]+".xlsx"然后我的 ConnectionString 更改为: Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Test\.xlsx;Extended Properties="Excel 12.0;HDR=YES";

我已经在测试文件夹中创建了所有文件模板(全部结构相同)。我收到以下错误:

Error at Data Flow Task [Excel Destination [131]]: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80040E37.

Error at Data Flow Task [Excel Destination [131]]: Opening a rowset for "Sheet1$" failed. Check that the object exists in the database.

Exception from HRESULT: 0xC02020E8 (Microsoft.SqlServer.DTSPipelineWrap)

我做错了什么?或者甚至可以在 SSIS 中执行此操作吗?

1

2

3]

4]

5]

6]

7]

8]

9]

10

11

12

最佳答案

请参见此处:Dynamically assign filename to excel connection string

使用ExcelFilePath,而不是ConnectionString

只是为了澄清:

  • 如果您要将具有相同列的相同数据加载到多个 Excel 工作表中,只需导出一次并在文档上进行文件复制就会容易得多
  • 如果每个工作表都有不同的列,那么这将不起作用 - 每个数据流每次运行时都需要具有相同的列

  • 如果您要加载相同的列但过滤后的数据不同,那么您可能需要考虑为什么要这样做。是为了克服Excel中的行限制吗?如果是这样,请导出为 CSV。是为用户生成自定义报告吗?考虑使用报告工具。

关于sql-server - 如何将SQL表中的数据导出到SSIS中的多个Excel文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48412857/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com