【问题标题】:SSIS write dynamic results set variable to MSSQL tableSSIS 将动态结果集变量写入 MSSQL 表
【发布时间】:2019-07-06 17:34:53
【问题描述】:

我正在创建一个 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 中是否可行?

【问题讨论】:

    标签: sql-server dynamic ssis etl


    【解决方案1】:

    好吧,没有脚本对象的普通 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. 然后,让 DataTable 对象填充值和元数据,您可以创建 SQL Create Table 语句,然后 - 从 DataTable 执行批量插入数据。这是excellent code example

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

    【讨论】:

    • 我怀疑脚本任务有可能。感谢您的出色回答,我今天将对其进行测试
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    相关资源
    最近更新 更多