Search code examples
ssisetlscript-task

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


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


Solution

  • 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