Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SSIS - How to access a RecordSet variable inside a Script Task

Tags:

How do you access a RecordSet variable inside a Script Task?

like image 537
GordyII Avatar asked Apr 08 '10 01:04

GordyII


People also ask

How do I use Recordset destination in SSIS?

To save data to a Recordset destination and process each row by using the Foreach Loop container. In SQL Server Data Tools (SSDT), create or open an Integration Services package. Create a variable that will contain the recordset saved into memory by the Recordset destination, and set the variable's type to Object.

What is Recordset destination and where do we need use?

A RecordSet Destination stores data in memory using an SSIS package object variable. It does not save this data to the external data source. Once we have data in the RecordSet destination, we can use it in SSIS containers such as a Foreach Loop.

What is ADO recordset?

The ADO Recordset object is used to hold a set of records from a database table. A Recordset object consist of records and columns (fields). In ADO, this object is the most important and the one used most often to manipulate data from a database.


2 Answers

Listed below is the code I used to load a datatable in a C# script task from a recordset or resultset variable. "User::transactionalRepDBs" is a SSIS variable of Object (System.Object) that was loaded through a "Full result set" from a execute SQL task script. This link assisted me.

using System.Data.OleDb;  DataTable dt= new DataTable(); OleDbDataAdapter adapter = new OleDbDataAdapter(); adapter.Fill(dt, Dts.Variables["User::transactionalRepDBs"].Value);  foreach (DataRow row in dt.Rows) {    //insert what you want to do here } 
like image 163
Tequila Avatar answered Sep 21 '22 13:09

Tequila


On the script tab, make sure you put the variable in either the readonlyvariables or readwritevariables text boxes.

Here is a simple script that I use to format the errors in a data flow (saved in a RecordSet Variable) into the body of an email. Basically I read the recordset varialbe into a datatable and process it row by row with the for loops. After this task completes I examine the value of uvErrorEmailNeeded to determine if there is anything to email using a conditional process flow connector. You will also need to add a reference to system.xml in your vb script. This is in SQL 2005.

Imports System Imports System.Data Imports System.Math Imports Microsoft.SqlServer.Dts.Runtime Imports System.Xml Imports System.Data.OleDb   Public Class ScriptMain       Public Sub Main()           Dim oleDA As New OleDbDataAdapter         Dim dt As New DataTable         Dim col As DataColumn         Dim row As DataRow         Dim sMsg As String         Dim sHeader As String           oleDA.Fill(dt, Dts.Variables("uvErrorTable").Value)         If dt.Rows.Count > 0 Then             Dts.Variables("uvErrorEmailNeeded").Value = True             For Each col In dt.Columns                 sHeader = sHeader & col.ColumnName & vbTab             Next             sHeader = sHeader & vbCrLf             For Each row In dt.Rows                 For Each col In dt.Columns                     sMsg = sMsg & row(col.Ordinal).ToString & vbTab                 Next                 sMsg = sMsg & vbCrLf             Next             Dts.Variables("uvMessageBody").Value = "Error task. Error list follows:" & vbCrLf & sHeader & sMsg & vbCrLf & vbCrLf         End If          Dts.TaskResult = Dts.Results.Success     End Sub  End Class 
like image 39
William Salzman Avatar answered Sep 19 '22 13:09

William Salzman