首页 文章

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

提问于
浏览
2

我有几个产生输出的程序(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 回答

  • 0

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

  • 1

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

    // Set up the DataAdapter to extract the data,  
    // and the DataTable object to capture those results  
    OleDbDataAdapter da = OleDbDataAdapter(); 
    DataTable dt = DataTable();
    // Extract the data from the object variable into the table 
    da.Fill(dt, Variables.vResults);
    

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

相关问题