0

是否可以在 SSIS 脚本组件源中读取对象变量值?

我有一个 Object 类型的变量,它包含使用 SQL 脚本任务填充的表中的记录。

我已经使用了这个脚本任务,它通过使用下面的代码完美地工作

oleDA.Fill(dt, Dts.Variables("vTableRowsObj").Value) 

这样,vTableRowsObj对象变量在哪里。

我想在 SSIS 脚本组件中读取此对象,以便可以直接将脚本组件的输出提供给目标表。

最终目标是我计划创建更多对象变量,并简单地通过读取这些对象,将输出从脚本组件提供给目标表。

4

3 回答 3

4

我有一个类似的问题。
这里有一些参考链接,下面是我的代码,用于 ID 和名称的简单输出。

http://agilebi.com/jwelch/2007/03/22/writing-a-resultset-to-a-flat-file/
http://www.ssistalk.com/2007/04/04/ssis-using- a-script-component-as-a-source/
http://consultingblogs.emc.com/jamiethomson/archive/2006/01/04/SSIS_3A00_-Recordsets-instead-of-raw-files.aspx

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
using System.Xml;
using System.Data.OleDb;

public override void CreateNewOutputRows()
{
    DataTable dt = new DataTable();
    OleDbDataAdapter oleda = new OleDbDataAdapter();
    oleda.Fill(dt, this.Variables.ObjectVariable);

    foreach (DataRow row in dt.Rows)
    {
        Output0Buffer.AddRow();
        Output0Buffer.ID = Convert.ToInt32(row.ItemArray[0]);
        Output0Buffer.Name = row.ItemArray[1].ToString();
    }

}
于 2014-02-09T01:09:43.447 回答
2

鉴于您有一个由 SQL 脚本任务填充的记录的表,为什么需要将该数据加载到 Object 类型的变量中?为什么不直接将该表用作数据流中的数据源?基本步骤是...

1)运行您的 SQL 脚本任务并将结果加载到表中(听起来您已经这样做了)

2) 跳过将记录加载到 Object 变量

3) 而是将数据流组件作为下游连接添加到您的 SQL 脚本任务

4) 将 Source 组件添加到您的数据流:使用您使用 SQL 脚本任务填充的表作为您的数据源

5)将目标组件添加到您的数据流:使用您的目标表作为您的数据目标

但是,本着回答您直接提出的问题的精神(如果我实际上正确理解了您的问题),那么简单的答案是肯定的,您可以使用 SSIS 脚本组件作为数据流中的数据源。本文将引导您完成这些步骤

于 2014-01-09T06:07:03.240 回答
2

由于我今天偶然发现了这个问题,让我给你我的解决方案:

首先(您已经完成但为了清楚起见放在此处):

创建 ExecuteSQL 任务,将“ResultSet”设置为“Full result set”并将其分配给对象类型变量: 在此处输入图像描述

在此处输入图像描述

然后将其链接到“脚本任务”,然后将变量添加到“ReadOnly”或“ReadWriteVariables”

在此处输入图像描述

现在您只需要访问此变量 - 正如您建议的那样,将其填充到数据表中,然后将其分配给字符串变量:

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.Data.OleDb;   

public void Main()
    {
        // TODO: Add your code here            
        DataTable dt = new DataTable();
        var oleDa = new OleDbDataAdapter();
        oleDa.Fill(dt, Dts.Variables["Destination"].Value);
        string yourValueAsString= dt.Rows[0][0].ToString();
        Dts.Variables["MyStringVariable"].Value = yourValueAsString;                     
        [...]
        Dts.TaskResult = (int)ScriptResults.Success;
    }     
于 2018-04-17T01:14:01.023 回答