Estou tentando obter o valor de um procedimento armazenado em uma variável do SSIS e testando para ver se duas tarefas do SSIS podem funcionar se eu adicionei 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 correta para que o valor do proc armazenado seja importado para uma variável SSIS. Por favor, diga-me se precisar de mais screencaps de qualquer outra coisa.
Aqui está o exemplo da tarefa:
E aqui está o screencap do Editor de restrições de precedência:
E aqui estão as propriedades para a primeira tarefa:
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 a expressão foi verificada como verdadeira ou não. Como posso fazer uma coisa dessas e o que está errado? Eu tenho uma variável no SSIS chamada 'orderCount' para obter o valor do processo armazenado.
fonte
@[User::orderCount]
Result Set
página. simple-talk.com/sql/ssis/...@[User::orderCount]<5?(dt_bool)1:(dt_bool)0
. Não se esqueça de postar resultados de volta neste tópico, se for bem-sucedido. GL!Respostas:
Você tem duas opções para fazer isso funcionar. Você pode usar um conjunto de resultados único ou o parâmetro OUTPUT. No momento, você não está usando corretamente.
Parâmetro OUTPUT
Seu procedimento armazenado é definido como tendo um parâmetro
@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
OUTPUT
procedimento acima sem especificar, mas observe o valor de @orderCount. Muda de 1435 para 0.O mesmo vale quando você estiver usando a tarefa Executar SQL no SSIS. Você deve especificar que o parâmetro esteja em OUTPUT e também na guia Mapeamentos de parâmetros.
Especifique também a variável que você 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 único
Você tem a primeira parte correta - especificou que o conjunto de resultados é Linha Única.
Você notará que estou usando,
EXECUTE dbo.TestStoredProcSSVariable ?
pois você deve especificar um valor de entrada ou a chamada proc será interrompida (pelo menos como você definiu). Você poderia codificar um valor em vez de algo?
semelhante0
Em seguida, na guia Conjunto de resultados, aqui estou mapeando a primeira coluna (zeroth ordinal) para uma variável chamada
orderCountb
Se você executar o procedimento armazenado fornecido, não receberá um valor em orderCountb. Por quê? Porque você não está retornando nada da chamada de procedimento armazenado. Eu adicionei uma declaração final dentro do procedimento armazenado de
Faça Você Mesmo
Você pode explorar qualquer uma das abordagens usando o seguinte biml. O que é biml? A Business Intelligence Markup Language é o sistema operacional para BI. Por que você se importa com isso é que ele permitirá transformar um pouco de XML em um pacote SSIS. Tudo o que você precisa fazer é baixar e instalar o addon BIDS Helper gratuito
Depois de instalar o BIDS Helper,
Data Source
para um servidor real eProvider
alinhe-o com sua versão do SSIS. Olhando para a sua captura de tela, provavelmente será SQLNCLI10.1Bimlscript.biml
Aproveite o seguinte pacote SSIS
fonte