Чтение значений переменных объекта в источнике компонента сценария SSIS

Можно ли прочитать значения переменных объекта в источнике компонента сценария служб SSIS?

У меня есть переменная типа Object, которая содержит записи из таблицы, заполненной с помощью задачи SQL Script.

Я использовал эту задачу скрипта, и она отлично работает, используя приведенный ниже код

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

таким образом, где vTableRowsObj переменная объекта

Я хочу прочитать этот объект в компоненте сценария служб SSIS, чтобы можно было напрямую передать выходные данные из компонента сценария в таблицу назначения.

Конечная цель заключается в том, что я планирую создать больше переменных объекта и, просто прочитав эти объекты, передать выходные данные в таблицы назначения из компонента сценария.

3 ответа

У меня была похожая проблема.
Вот несколько ссылок на ссылки, и мой код ниже для простого вывода идентификатора и имени.

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();
    }

}

Учитывая, что у вас есть таблица с записями, заполняемыми задачей SQL Script, зачем загружать эти данные в переменную типа Object? Почему бы просто не использовать эту таблицу в качестве источника данных в потоке данных? Основные шаги...

1) Запустите задачу SQL Script и загрузите результаты в таблицу (звучит так, как будто вы уже делаете это)

2) Пропустить загрузку записей в переменную Object

3) Вместо этого добавьте компонент потока данных в качестве нисходящего соединения к вашей задаче сценария SQL

4) Добавьте компонент Source в свой поток данных: используйте таблицу, которую вы заполнили с помощью задачи SQL Script, в качестве источника данных.

5) Добавьте компонент назначения в ваш поток данных: используйте таблицу назначения в качестве места назначения данных

Однако в духе ответа на вопрос, который вы задали напрямую (если я действительно правильно понял ваш вопрос), простой ответ - да, вы можете использовать компонент сценария SSIS в качестве источника данных в потоке данных. Эта статья проведет вас через шаги.

Поскольку я наткнулся на эту проблему сегодня, позвольте мне дать вам мое решение:

Сначала (то, что вы сделали, но поместили здесь для ясности):

Создайте задачу ExecuteSQL с "ResultSet", установленным в "Полный набор результатов", и назначьте ее переменной типа объекта: введите описание изображения здесь

введите описание изображения здесь

Затем свяжите его с "Задачей сценария", а затем добавьте переменную либо в "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;
    }     
Другие вопросы по тегам