【发布时间】:2011-12-02 17:12:51
【问题描述】:
让我先说在 SSIS 方面我还是个新手。我正在尝试替换当前具有 13 个查询的 MS Access 流程,这些查询在 excel 中创建并通过电子邮件发送给用户列表。
我的 SSIS 包需要获取报告名称、电子邮件地址列表、报告数据,创建一个 csv 文件,然后为每个文件发送一封电子邮件。
我在 SQL Server 中创建了以下内容:
- 包含报告的表格 - 每个表格都有一个 ReportId
- 包含用户电子邮件地址的表格
- 将用户链接到每个报告的连接表
- 当我传入 ReportId 时创建了一个存储过程,它会返回电子邮件分布列表以及一些报告详细信息以供我发送电子邮件时使用
- 创建了我将 ReportId 传递给的存储过程。作为回报,我将获得该报告的任何值。每个报告都有一个不同的查询,该查询返回不同的数据列。
我还尝试创建一个执行以下操作的 SSIS 包:
- 使用
Execute SQL Task获取活动报告ID 列表 - 将
Foreach Container Loop设置为ADO Enumerator以循环遍历每个报告ID -
Execute SQL Task将返回我的报告详细信息和每个报告 ID 的电子邮件地址列表。
然后我尝试在我的循环中放置一个 Data Flow Task 并运行我的存储过程以返回每个报告 ID 的报告数据,但我收到一条错误消息:
Error: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred.
Error code: 0x80040E55. An OLE DB record is available.
Source: "Microsoft SQL Server Native Client 10.0" Hresult: 0x80040E55 Description: "Column does not exist.".
我猜这个错误是因为我的列在每个报告上都不相同。如果是这种情况,那么您对如何进行有什么建议吗?
我应该在我的 SSIS 包中使用哪些步骤来检查每个报告?我是否需要创建单独的 SSIS 包来运行每个报告?
如果我可以在一个包中运行它,我是否需要为我生成的每个 csv 报告创建一个平面文件连接管理器?
【问题讨论】:
标签: sql-server sql-server-2005 ssis foreach export-to-csv