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



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

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

DROP TABLE IF EXISTS dbo.testTable;
SELECT *
INTO dbo.testTable
FROM [User::ResultSet]

在 SSIS 2015 中,在不知道 ComObject 中的类型、名称和列数的情况下,是否可以执行此操作?

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

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

  1. 具有完整结果集的 ComObject 使用的对象类型变量为 ADO Recordset(如果使用 OLEDB 连接管理器(或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. 然后,用值和元数据填充数据表对象,您可以创建 SQL Create Table语句,然后 - 从数据表批量插入数据。这是一个出色的代码示例。

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

最新更新