Estou construindo um pacote para executar um procedimento com parâmetros de uma tabela de configuração.
Criei duas caixas Executar Tarefa SQL. Um preenche as variáveis SSIS da tabela de configuração. A segunda executa o procedimento com essas variáveis.
Estou enfrentando o seguinte comportamento. Variáveis inteiras têm um 0 como valor padrão e strings uma string vazia. Mesmo depois de obter NULL da tabela de configuração, essas variáveis mantêm seus valores.
Como posso alterar esse comportamento para aplicar a lógica do SQL Server de NULL como um "valor" padrão ou apenas para habilitar NULL que eles obtêm da tabela de configuração para substituir seu valor padrão?
O SSIS não oferece suporte a tipos anuláveis por suas variáveis incorporadas. Então - como você experimentou - um inteiro nulo em SQL se tornará zero quando atribuído como uma variável SSIS. Essas são as pausas, mas existem soluções alternativas.
Para manter os NULLs da nossa tabela de origem, precisaremos pular toda a "atribuição a variáveis SSIS" completamente. Dê uma olhada no Comando OLE DB . É semelhante ao comando Executar SQL, exceto que opera no nível do fluxo de dados. Ele opera um comando SQL por linha em execução. A vantagem disso é que você nunca precisa mapear um conjunto de resultados SQL para variáveis SSIS. Trabalhar dentro de um fluxo de dados é SQL out e SQL in. Podemos evitar toda a dor de cabeça "não anulável" passando um
SELECT TOP 1 * FROM MyConfigTable
para um comando OLE DB. Dentro do componente OLE DB Command, você pode atribuir as colunas ResultSet aos parâmetros SP.Eu sei que é uma mudança, mas acho que mudar de duas tarefas Executar SQL em sucessão para um fluxo de dados contendo um componente de comando OLE DB é o que você deseja. Qualquer outra coisa envolveria uma tarefa de script. Boa sorte!