我有几个产生输出的程序(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中有一种方法,我可以动态处理元数据并生成输出文件。
答案 0 :(得分:1)
您可以查看BiML,它使用元数据动态构建然后执行包。
答案 1 :(得分:0)
嗯,在传统的SSIS包中几乎不可能,所有输出都是在设计时定义的,并在运行时验证。更改其编号会导致验证错误并停止程序包执行 您可以使用SQL执行任务和脚本组件来玩技巧。 Exec SQL运行SP并将SP结果作为“完整结果集”返回存储在Object变量中。然后在Script任务中打开这个实际上是ADO记录集的变量;它可以由System.Data.OleDb.OleDbDataAdapter读取。例如:
@Path("/")
然后,您可以使用DataSet并将其展平为单个变量以供以后使用。或者 - 直接在C#脚本中创建和保存文件。