Partilhar via


Usando variáveis na tarefa Script

Variáveis possibilitam que a tarefa Script troque dados com outros objetos no pacote. Para obter mais informações, consulte Variáveis do Integration Services.

A tarefa Script usa a propriedade Variables do objeto Dts para ler de e escrever em objetos Variable no pacote.

ObservaçãoObservação

A propriedade Value da classe Variable é do tipo Object. Como a tarefa Script tem Option Strict habilitado, converta a propriedade Value no tipo apropriado antes de utilizá-la.

Você adiciona variáveis existentes às listas ReadOnlyVariables e ReadWriteVariables no Editor da Tarefa Script para disponibilizá-las para o script personalizado. Lembre-se de que os nomes de variáveis diferenciam maiúsculas de minúsculas. No script, você acessa variáveis de ambos os tipos através da propriedade Variables do objeto Dts. Use a propriedade Value para ler e gravar em variáveis individuais. A tarefa Script gerencia de forma transparente o bloqueio à medida que o script lê e modifica os valores de variáveis.

Você pode usar o método Contains da coleção Variables retornada pela propriedade Variables para verificar a existência de uma variável antes de usá-la no seu código.

Você também pode usar a propriedade VariableDispenser (Dts.VariableDispenser) para trabalhar com variáveis na tarefa Script. Ao usar o VariableDispenser, trate das semânticas de bloqueio e da conversão de tipos de dados para obter valores de variáveis em seu próprio código. Talvez seja necessário usar a propriedade VariableDispenser em vez da propriedade Variables para trabalhar com uma variável que não está disponível no tempo de design mas é criada programaticamente no tempo de execução.

Usando a tarefa Script dentro de um contêiner Loop Foreach

Quando uma tarefa Script é executada repetidas vezes dentro de um contêiner Loop Foreach, em geral o script precisa trabalhar com o conteúdo do item atual no enumerador. Por exemplo, ao usar o enumerador de Arquivo Foreach, o script precisa saber o nome do arquivo atual; ao usar o enumerador ADO Foreach, o script precisa saber o conteúdo das colunas da linha de dados atual.

As variáveis possibilitam essa comunicação entre o contêiner Loop Foreach e a tarefa Script. Na página Mapeamentos de Variáveis do Editor de Loop Foreach, atribua variáveis a cada item de dados retornado por um único item enumerado. Por exemplo, um enumerador de Arquivo Foreach retorna apenas um nome de arquivo no Índice 0 e, portanto, requer apenas um mapeamento de variável, enquanto um enumerador que retorna várias colunas de dados em cada linha requer o mapeamento de uma variável diferente para cada coluna a ser usada na tarefa Script.

Depois de mapear itens enumerados para variáveis, adicione as variáveis mapeadas à propriedade ReadOnlyVariables da página Script do Editor da Tarefa Script para disponibilizá-las para seu script. Para obter um exemplo de uma tarefa Script dentro de um contêiner do Loop Foreach que processa os arquivos de imagem em uma pasta, consulte Trabalhando com imagens com a tarefa Script.

Exemplo de variáveis

O exemplo a seguir demonstra como acessar e usar variáveis em uma tarefa Script para determinar o caminho do fluxo de trabalho do pacote. O exemplo pressupõe que você criou variáveis de inteiro nomeadas CustomerCount e MaxRecordCount e adicionou-as à coleção ReadOnlyVariables no Editor da Tarefa Script. A variável CustomerCount contém o número de registros de cliente a serem importados. Se seu valor for maior que o valor de MaxRecordCount, a tarefa Script reportará uma falha. Quando uma falha ocorre porque o limite de MaxRecordCount foi excedido, o caminho de erro do fluxo de trabalho pode implementar qualquer limpeza exigida.

Para compilar o exemplo com êxito, adicione uma referência ao assembly 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;
        }

    }

} 
Ícone do Integration Services (pequeno) Fique atualizado com o Integration Services

Para obter os mais recentes downloads, artigos, exemplos e vídeos da Microsoft, bem como soluções selecionadas da comunidade, visite a página do Integration Services no MSDN ou TechNet:

Para receber uma notificação automática das atualizações, assine os feeds RSS disponíveis na página.