Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Here is an example on how to use variables and parameters in a Script Component.
First you need to add the variables and/or parameters to the readonly and/or readwrite variables. Edit the Script Component and in the Script Pane you will find two textboxes: ReadOnlyVariables and ReadWriteVariables. They are for variables and parameters.
Note: parameters are always readonly. Variables can be readonly or readwrite.
Now you can use them in the script. There is one big difference with the Script Task: reading and/or writing variables and parameters can only be done in the PreExecute and PostExecute method.
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
// .Net variables to store values from parameters and variables.
// Declare these outside the methods so that you can use them
// in all methods.
int myCounter = 0;
int myTotalSales = 0;
public override void PreExecute()
{
base.PreExecute();
// The method that executes first is a good place to read variables and parameters.
// Because you can't read variables in other methods like Input0_ProcessInputRow,
// you must use .Net variables to store the variable or parameter value.
// Note: in contrast to the Script Task, you don't use scopes in the variable and
// parameters names:
myCounter = this.Variables.MyIntegerVariable;
// example with parameter: There are no differences between code for parameters
// and variables
myTotalSales = this.Variables.MyIntegerPackageParam;
}
public override void PostExecute()
{
base.PostExecute();
// The method that executes last is a good place to write variables, but there is
// one big drawback/issue: The variable is filled when the Data Flow Task is finished.
// So you can't use the variable value in the same Data Flow Task, because it will
// still have the old value.
this.Variables.MyIntegerVariable = myCounter;
}
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
// Count sales from all records and store result in .Net variable
myTotalSales = myTotalSales + Row.Sale;
// Count records and store result in .Net variable
myCounter++;
// or count records and store result in a (readwrite) column
Row.RowNumber = myCounter;
Row.CumulativeSales = myTotalSales;
}
}
For a VB.NET version of the code, check out this blog post. It also shows a second option with the VariableDispenser, but that isn't the preferred method.