Como @Yuck e @devarc observaram, existem dois valores diferentes e distintos a Variável detém. O valor de tempo de design é o valor que você atribui quando a variável é criada pela primeira vez. No seu caso, a variável contém C:\Test.txt como o valor em tempo de design. Toda vez que você abrir o pacote, ele mostrará C:\Test.txt até que você o altere no
Para alterar o valor de uma variável enquanto o pacote está em execução, suas opções são definir o valor ou calculá-lo. Aqui eu criei uma variável de nível de pacote
CurrentFile
com o valor de C:\Test.txt Uma coisa que muitas vezes engana as pessoas é que elas alteraram corretamente o valor do tempo de execução, mas quando o executam em BIDS, elas veem o valor "antigo". O valor exibido na janela Variáveis não muda durante a execução do pacote.
Durante a execução do pacote, minha janela Variáveis ainda mostra o valor em tempo de design (C:\Test.txt), mas o valor verdadeiro é refletido na janela Locais (C:\Test2.txt)
Definindo um valor
O valor de quase tudo no SSIS pode ser estabelecido em tempo de execução por meio de um conjunto de opções de linha de comando ou através da configuração fontes. A maior diferença em minha mente é que essa abordagem é que o valor sempre será o valor para toda a vida útil da execução do pacote. Invocações sequenciais ou paralelas de um pacote podem alterar esse valor, mas para isso execução, o valor permaneceria constante (exceto uma modificação explícita do valor.
/SET
Execução de linha de comando (dtexec.exe), clicar com o botão direito do mouse em um pacote e executar a partir do sistema de arquivos (dtexecUI.exe) ou criar uma etapa de trabalho do SQL Agent do SQL Server Integration Services permitem fornecer um valor de tempo de execução por meio do comando SET . Usando a variável acima, o comando a seguir definiria o valor de tempo de execução para
C:\Test2.txt
dtexec /file C:\Generated.dtsx /set \Package.Variables[User::CurrentFile].Properties[Value];"C:\Test2.txt"
Configuração
O SSIS oferece uma opção para criar fontes de configuração para fornecer valores de tempo de execução aos pacotes. O artigo ao qual vinculei acima faz um trabalho muito melhor descrevendo os prós e contras das opções de configuração do que farei aqui. Eu direi que normalmente uso os dois - meu comando SET configura um gerenciador de conexões que é usado pelo pacote para encontrar o conjunto "completo" de configurações do pacote.
Calculando um valor
Há uma variedade de tarefas no SSIS que podem alterar o valor de uma variável, bem como o uso de Expressões para alterar um valor. Eu vejo isso como coisas que operam em valor enquanto o pacote está em vôo.
Tarefas
Uma tarefa de script é um dos mecanismos mais usados para quem está começando, mas acho que outras ferramentas no kit de ferramentas do SSIS geralmente são mais adequadas para alterar valores de variáveis.
Contêiner de Loop Foreach e Executar tarefa SQL são duas das outras grandes tarefas que você deve observar para atribuição de um valor de variável.
Expressões
As expressões são os doces mais gloriosos da caixa de ferramentas do SSIS. Quase todas as "coisas" no SSIS expõem propriedades para configuração. Isso é útil, mas usar a atribuição de uma expressão para construir essas propriedades é excelente.
Por exemplo, imagine 3 variáveis
RootFolder
, FileName
e ComputedCurrentFile
com valores de C:\, File2.txt e string vazia. Na janela Propriedades de ComputedCurrentFile
alteraríamos o valor de EvaluateAsExpression de False para True e usaríamos uma expressão como @[User::RootFolder]+ "\\" [email protected][User::FileName]
Isso simplesmente concatena o valor das duas primeiras variáveis juntas. Isso pode ser útil se o nome do arquivo para processamento for padrão, mas a pasta de origem for alterada com frequência. Ou se estamos falando de saída, é comum usar expressões para construir um nome de arquivo de saída usando a data e possivelmente a hora de quando o pacote está sendo executado. Finalmente, não há nada que impeça uma mistura e combinação dessas abordagens. Normalmente, uso uma configuração para apontar um enumerador de arquivo para a pasta inicial correta e, em seguida, uso valores calculados para identificar o arquivo atual para processamento.