Compartir a través de


Utilizar variables en la tarea Script

Las variables permiten que la tarea Script intercambie datos con otros objetos del paquete. Para obtener más información, vea Variables de Integration Services.

La tarea Script utiliza la propiedad Variables del objeto Dts para leer de y escribir en los objetos Variable del paquete.

[!NOTA]

La propiedad Value de la clase Variable es del tipo Object. Dado que la tarea Script tiene Option Strict habilitado, debe convertir la propiedad Value al tipo adecuado antes de utilizarla.

Las variables existentes se agregan a las listas ReadOnlyVariables y ReadWriteVariables en el Editor de la tarea Script para que estén disponibles en el script personalizado. Tenga presente que los nombres de variable distinguen entre mayúsculas y minúsculas. Dentro del script, tiene acceso a las variables de ambos tipos a través de la propiedad Variables del objeto Dts. Utilice la propiedad Value para leer de y escribir en las variables individuales. La tarea Script administra de forma transparente el bloqueo a medida que el script lee y modifica los valores de las variables.

Puede utilizar el método Contains de la colección Variables que devuelve la propiedad Variables para comprobar la existencia de una variable antes de utilizarla en el código.

También puede utilizar la propiedad VariableDispenser (Dts.VariableDispenser) para trabajar con variables en la tarea Script. Al utilizar VariableDispenser, debe administrar la semántica de bloqueo y la conversión de tipos de datos para los valores de variables en su propio código. Puede que necesite utilizar la propiedad VariableDispenser en lugar de la propiedad Variables si desea trabajar con una variable que no está disponible en tiempo de diseño pero que se crea mediante programación en tiempo de ejecución.

Utilizar la tarea Script dentro de un contenedor de bucles Foreach

Cuando una tarea Script se ejecuta repetidamente dentro de un contenedor de bucles Foreach, normalmente el script necesita trabajar con el contenido del elemento actual en el enumerador. Por ejemplo, al utilizar un enumerador de archivos para Foreach, el script necesita conocer el nombre del archivo actual; al utilizar un enumerador de ADO para Foreach, el script necesita conocer el contenido de las columnas en la fila actual de datos.

Las variables consiguen que sea posible esta comunicación entre el contenedor de bucles Foreach y la tarea Script. En la página Asignaciones de variables del Editor de bucles Foreach, asigne variables a cada elemento de datos que devuelve un único elemento enumerado. Por ejemplo, un enumerador de archivos para Foreach solamente devuelve un nombre de archivo en Índice 0 y por tanto solamente requiere una asignación de variable, en tanto que un enumerador que devuelve varias columnas de datos en cada fila requiere que asigne una variable diferente a cada columna que desea utilizar en la tarea Script.

Después de asignar los elementos enumerados a las variables, debe agregar las variables asignadas a la propiedad ReadOnlyVariables en la página Script del Editor de la tarea Script para que estén disponibles en el script. Para obtener un ejemplo de una tarea Script dentro de un contenedor de bucles Foreach que procesa los archivos de imagen en una carpeta, vea Trabajar con imágenes con la tarea Script.

Ejemplo de variables

En el ejemplo siguiente se muestra cómo obtener acceso y utilizar las variables en una tarea Script para determinar la ruta de acceso de flujo de trabajo del paquete. El ejemplo supone que ha creado variables de entero denominadas CustomerCount y MaxRecordCount y que las ha agregado a la colección ReadOnlyVariables en el Editor de la tarea Script. La variable CustomerCount contiene el número de registros del cliente que se van a importar. Si su valor es mayor que el valor de MaxRecordCount, la tarea Script informa del error. Cuando se produce un error porque se ha superado el umbral MaxRecordCount, la ruta de acceso de error del flujo de trabajo puede implementar cualquier limpieza necesaria.

Para compilar correctamente el ejemplo, debe agregar una referencia al ensamblado Microsoft.SqlServer.ScriptTask.

Public Sub Main()

    Dim customerCount As Integer
    Dim maxRecordCount As Integer

    If Dts.Variables.Contains("CustomerCount") = True AndAlso _
        Dts.Variables.Contains("MaxRecordCount") = True Then

        customerCount = _
            CType(Dts.Variables("CustomerCount").Value, Integer)
        maxRecordCount = _
            CType(Dts.Variables("MaxRecordCount").Value, Integer)

    End If

    If customerCount > maxRecordCount Then
            Dts.TaskResult = ScriptResults.Failure
    Else
            Dts.TaskResult = ScriptResults.Success
    End If

End Sub
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;

public class ScriptMain
{



    public void Main()
    {
        int customerCount;
        int maxRecordCount;

        if (Dts.Variables.Contains("CustomerCount")==true&&Dts.Variables.Contains("MaxRecordCount")==true)

        {
            customerCount = (int) Dts.Variables["CustomerCount"].Value;
            maxRecordCount = (int) Dts.Variables["MaxRecordCount"].Value;

        }

        if (customerCount>maxRecordCount)
        {
            Dts.TaskResult = (int)ScriptResults.Failure;
        }
        else
        {
            Dts.TaskResult = (int)ScriptResults.Success;
        }

    }

} 
Icono de Integration Services (pequeño) Manténgase al día con Integration Services

Para obtener las más recientes descargas, artículos, ejemplos y vídeos de Microsoft, así como soluciones seleccionadas de la comunidad, visite la página de Integration Services en MSDN o TechNet:

Para recibir notificaciones automáticas de estas actualizaciones, suscríbase a las fuentes RSS disponibles en la página.