我有几个产生输出的程序(sql server),我手动将它们保存在带有 Headers 的文本文件中 .
我需要一个通用的SSIS包,它将procedure_name,output_filename作为输入并生成输出文本文件 .
由于不同的过程产生不同的列,我需要动态处理元数据 .
例如:proc1产生以下结果
COL1 | COL2
A | B
proc2产生以下结果:
COL1 | COL2 | COL3
1 | 2 |一个
一种解决方案是将所有过程更改为单行生成输出,因此SSIS将其视为一列并生成输出文件 . 例如:
'col1 | col2 | cole'AS rowdata
'1 | 2 | a'AS rowdata
然而,有相当多的程序,改变每个程序将花费大量时间,并可能最终导致人为错误 .
所以,我想知道,如果在SSIS中有一种方法,我可以动态处理元数据并生成输出文件 .
2 回答
您可以查看BiML,它使用元数据动态构建然后执行包 .
嗯,在传统的SSIS包中几乎不可能,所有输出都是在设计时定义的,并在运行时验证 . 更改其编号会导致验证错误并停止程序包执行 .
您可以使用SQL执行任务和脚本组件来玩技巧 . Exec SQL运行SP并将SP结果返回为存储在Object变量中的'Full Result Set' . 然后在Script任务中打开这个实际上是ADO记录集的变量;它可以由System.Data.OleDb.OleDbDataAdapter读取 . 例如:
然后,您可以使用DataSet并将其展平为单个变量以供以后使用 . 或者 - 直接在C#脚本中创建和保存文件 .