Usando variáveis na tarefa Script

Aplica-se a: SQL Server SSIS Integration Runtime em Azure Data Factory

As variáveis tornam possível que a tarefa Script troque dados com outros objetos do pacote. Para obter mais informações, consulte Variáveis dos Serviços de Integração (SSIS).

A tarefa Script utiliza a Variables propriedade do objeto DTS para ler e escrever nos Variable objetos do pacote.

Note

A Value propriedade da Variable classe é do tipo Objecto. Como a tarefa Script tem o Option Strict ativado, tens de castar a Value propriedade para o tipo apropriado antes de a poderes usar.

Adiciona-se variáveis existentes às ReadOnlyVariables listas e ReadWriteVariables no Editor de Tarefas de Scripts para as disponibilizar ao script personalizado. Lembra-te que os nomes das variáveis são distinguíveis de maiúsculas e maiúsculas. No script, acedes a variáveis de ambos os tipos através da Variables propriedade do objeto DTS . Use a propriedade Valor para ler e escrever em variáveis individuais. A tarefa Script gere o bloqueio de forma transparente à medida que o script lê e modifica os valores das variáveis.

Pode usar o Contains método da Variables coleção devolvida pela Variables propriedade para verificar a existência de uma variável antes de a usar no seu código.

Também podes usar a VariableDispenser propriedade (Dts.VariableDispenser) para trabalhar com variáveis na tarefa Script. Ao usar o VariableDispenser, deve tratar tanto da semântica de bloqueio como do casting dos tipos de dados para valores variáveis no seu próprio código. Pode precisar de usar a VariableDispenser propriedade em vez da Variables propriedade se quiser trabalhar com uma variável que não está disponível no design mas é criada programaticamente em tempo de execução.

Usar a tarefa de script dentro de um contentor de loop Foreach

Quando uma tarefa Script é executada repetidamente dentro de um contentor Foreach Loop, o script normalmente precisa de trabalhar com o conteúdo do item atual no enumerador. Por exemplo, ao usar um enumerador de ficheiros Foreach, o script precisa de saber o nome atual do ficheiro; ao usar um enumerador Foreach ADO, o script precisa de conhecer o conteúdo das colunas na linha atual de dados.

As variáveis tornam possível esta comunicação entre o contentor Foreach Loop e a tarefa Script. Na página de Mapeamentos de Variáveis do Editor de Loops Foreach, atribua variáveis a cada elemento de dados que é devolvido por um único item enumerado. Por exemplo, um enumerador de ficheiros Foreach devolve apenas um nome de ficheiro no Índice 0 e, portanto, requer apenas um mapeamento de variável, enquanto um enumerador que devolve várias colunas de dados em cada linha exige que mapeie uma variável diferente para cada coluna que pretende usar na tarefa Script.

Depois de mapear os itens enumerados para variáveis, deve adicionar as variáveis mapeadas à propriedade ReadOnlyVariables na página Script do Script Task Editor para as disponibilizar ao seu script. Para um exemplo de tarefa Script dentro de um contentor Foreach Loop que processa os ficheiros de imagem numa pasta, veja Trabalhar com Imagens com a Tarefa Script.

Exemplo de variáveis

O exemplo seguinte demonstra como aceder e usar variáveis numa tarefa Script para determinar o caminho do fluxo de trabalho do pacote. O exemplo assume que criou variáveis inteiras nomeadas CustomerCount e MaxRecordCount as adicionou à coleção ReadOnlyVariables no Editor de Tarefas de Script. A CustomerCount variável contém o número de registos de clientes a serem importados. Se o seu valor for maior do que o valor de MaxRecordCount, a tarefa Script reporta a falha. Quando ocorre uma falha porque o MaxRecordCount limiar foi ultrapassado, o caminho de erro do fluxo de trabalho pode implementar qualquer limpeza necessária.

Para compilar com sucesso o exemplo, precisa de adicionar uma referência à Microsoft. Assembly 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;  
        }  
  
    }  
  
}