通用ssis包使用多个过程创建输出文本文件

时间:2016-08-31 01:52:29

标签: sql sql-server ssis

我有几个产生输出的程序(sql server),我手动将它们保存在带有标题的文本文件中。

我需要一个通用的SSIS包,它将procedure_name,output_filename作为输入并生成输出文本文件。

由于不同的过程产生不同的列,我需要动态处理元数据。

Ex:proc1产生以下结果

COL1 | COL2

A | B

proc2产生以下结果:

COL1 | COL2 | COL3

1 | 2 |一个

一种解决方案是将所有过程更改为单行生成输出,因此SSIS将其视为一列并生成输出文件。 例如:

'col1 | col2 | cole'AS rowdata

'1 | 2 | a'AS rowdata

然而,有相当多的程序,改变每个程序将花费大量时间,并可能最终导致人为错误。

所以,我想知道,如果在SSIS中有一种方法,我可以动态处理元数据并生成输出文件。

2 个答案:

答案 0 :(得分:1)

您可以查看BiML,它使用元数据动态构建然后执行包。

答案 1 :(得分:0)

嗯,在传统的SSIS包中几乎不可能,所有输出都是在设计时定义的,并在运行时验证。更改其编号会导致验证错误并停止程序包执行 您可以使用SQL执行任务和脚本组件来玩技巧。 Exec SQL运行SP并将SP结果作为“完整结果集”返回存储在Object变量中。然后在Script任务中打开这个实际上是ADO记录集的变量;它可以由System.Data.OleDb.OleDbDataAdapter读取。例如:

@Path("/")

然后,您可以使用DataSet并将其展平为单个变量以供以后使用。或者 - 直接在C#脚本中创建和保存文件。