Estou tentando obter o valor de um procedimento armazenado em uma variável SSIS e, em seguida, testando para ver se duas tarefas SSIS podem funcionar se eu adicionar uma expressão. Então, por exemplo, estou tentando usar este procedimento armazenado:
Talvez eu esteja configurando as propriedades da variável SSIS totalmente erradas, porque também não tenho certeza se estou fazendo isso da maneira certa para que o valor proc armazenado seja importado para uma variável SSIS. Por favor, diga-me se você precisar de mais capturas de tela de qualquer outra coisa.
Aqui está o exemplo da tarefa:
E aqui está a captura de tela do Precedence Constraint Editor:
E aqui estão as propriedades para a primeira tarefa:
Eu quero que ele avance (ou falhe) com base nessa condição. Mas quando eu testo, o processo flui da primeira tarefa para a segunda, independentemente, e apenas me mostra "100% concluído" para a primeira tarefa e nada sobre se verificou se essa expressão é verdadeira ou não. Como posso fazer tal coisa e o que está errado? Eu tenho uma variável no SSIS chamada 'orderCount' para obter o valor do procedimento armazenado.
Você tem duas escolhas para fazer este trabalho. Você pode usar um conjunto de resultados único ou pode usar o parâmetro OUTPUT. No momento, você não está usando nenhum dos dois corretamente.
Parâmetro de SAÍDA
Seu procedimento armazenado é definido como tendo um parâmetro de
@OrderCount
com uma direção deOUTPUT
Se você quiser usar o procedimento armazenado em uma ferramenta, SSMS, .NET, qualquer que seja, seria algo como
É válido executar o acima sem especificar
OUTPUT
, mas observe o valor de @orderCount. Muda de 1435 para 0.O mesmo vale quando você está usando a Tarefa Executar SQL no SSIS. Você deve especificar que o parâmetro está em OUTPUT e também especificá-lo na guia Mapeamentos de parâmetros.
Especifique também a variável que deseja mapear e use a direção OUTPUT lá. Aqui, mapeei o resultado em uma variável SSIS do tipo Int32 chamada
orderCount
Conjunto de resultados únicos
Você acertou a primeira parte - você especificou que o conjunto de resultados é Linha Única.
Você notará que estou usando
EXECUTE dbo.TestStoredProcSSVariable ?
como você deve especificar um valor de entrada ou a chamada proc será interrompida (pelo menos como você definiu). Você poderia ter codificado um valor em vez de algo?
parecido0
Em seguida, na guia Conjunto de resultados, estou mapeando a primeira coluna (zero ordinal) para uma variável chamada
orderCountb
Se você executar o procedimento armazenado fornecido, não obterá um valor em orderCountb. Por quê? Porque você não está retornando nada da chamada do procedimento armazenado. Eu adicionei uma declaração final dentro do procedimento armazenado de
Faça Você Mesmo
Você pode explorar qualquer abordagem usando o seguinte biml. O que é Biml? O Business Intelligence Markup Language é o sistema operacional para BI. O motivo de você se importar com isso é que ele permitirá que você transforme algum XML em um pacote SSIS. Tudo o que você precisa fazer é baixar e instalar o complemento gratuito BIDS Helper
Depois de instalar o BIDS Helper,
Data Source
para um servidor real eProvider
alinhe com sua versão do SSIS. Olhando para sua captura de tela, provavelmente será SQLNCLI10.1Bimlscript.biml
Aproveite o seguinte pacote SSIS