Compartilhar 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 SSIS (Integration Services).

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

Observaçã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, você deve tratar as semânticas de bloqueio e a conversão de tipos de dados para obter valores 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, você deve adicionar as variáveis mapeadas à ReadOnlyVariables propriedade na página Script do Editor de Tarefas de 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 inteiras chamadas CustomerCount e MaxRecordCount as adicionou à ReadOnlyVariables coleção no Editor de Tarefas de 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) Mantenha-se atualizado com o Integration Services
Para obter os downloads, artigos, exemplos e vídeos mais recentes da Microsoft, bem como soluções selecionadas da comunidade, visite a página do Integration Services no MSDN:

Visite a página do Integration Services no MSDN

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

Confira também

Variáveis do SSIS (Integration Services)
Usar variáveis em pacotes