SSIS将动态结果集变量写入MSSQL表

时间:2019-02-13 00:38:06

标签: sql-server dynamic ssis etl

我正在创建一个SSIS应用程序,该应用程序将动态SQL结果(读取:变量号和列名)写入名为User::ResultSet的ComObject变量。

我现在想创建一个SSIS任务,如果表testTable存在,则将其删除,然后读取ComObject变量并将其插入MSSQL Server中的testTable表中。所以从本质上讲,我想这样做:

DROP TABLE IF EXISTS dbo.testTable;

SELECT *
INTO dbo.testTable
FROM [User::ResultSet]

在不知道ComObject的类型,名称和列数的情况下,在SSIS 2015中是否可能?

1 个答案:

答案 0 :(得分:3)

那么,没有脚本对象的普通SSIS无法做到这一点。 SSIS以元数据为中心,必须在运行包之前知道列名和类型。 SSIS运行时环境不允许即时更改元数据定义。

但是,您可以在脚本任务中执行所需的操作。这是方法:

  1. 对象类型具有完整结果集的ComObject使用的变量是ADO Recordset(如果使用OLEDB Connection Manager)或ADO DataSet(如果使用ADO.NET CM)。在前一种情况下,用类似的代码将ADO Recordset转换为ADO DataTable

    using System.Data.OleDb;  
    
    public void Main()
    {
        DataTable dt = new DataTable();
        OleDbDataAdapter oleda = new OleDbDataAdapter();
        oleda.Fill(dt, this.Variables.ObjectVariable);   
    
  2. 然后,使用填充了值和元数据的DataTable对象,您可以创建SQL Create Table语句,然后-从DataTable中批量插入数据。这是excellent code example

您的脚本任务将基于DataTable中的元数据创建SQL表,然后将其内容复制到新创建的表中。