No SSRS 2005, deve declarar a variável escalar
-
22-08-2019 - |
Pergunta
Eu tenho um relatório que administra um Proc armazenado:
EXEC ra_spProjectCalendar @Month, @Year, @ProjectID
O ProjectID é um suspensão de múltiplas seleções. Quando um único projeto é selecionado, funciona bem. Se eu selecionar vários projetos, recebo o erro:
"Must declare scalar variable "@ProjectID"
Funciona bem quando o executo na guia Dados, no entanto, quando o coloco no modo de visualização, tenho problemas.
Solução
Eu tenho algo semelhante ao trabalho, construindo a consulta como uma expressão - em seu exemplo
="EXEC ra_spProjectCalendar @Month = '" & Parameters!Month.Value & "',@Year='" & Parameters!Year.Value & "',@ProjectID = '" & Join(Parameters!ProjectID.Value, ",") & "'"
Alguns código no SP de destino dividem a sequência de múltiplas seleções em uma tabela temporária usada em junções para criar saída.
Não me lembro por que acabamos fazendo dessa maneira - estava bem no início de nossa mudança para o SSRS e as coisas se moveram um pouco desde então - mas pode ter sido o problema que você descreve.
Outras dicas
Eu tive o mesmo erro: deve declarar variável escalar.
Percebo agora que a primeira coisa a verificar é que, quando você entra na consulta como texto, ou o PROC armazenado como um tipo PROC armazenado, que o SSRS cria automaticamente a entrada de parâmetros na guia Parâmetros das propriedades do conjunto de dados. Se não os criar, não pode ler sua consulta corretamente.
No meu caso, eu estava usando o OpenQuery para chamar um cubo de serviços de análise e referenciar os nomes de campo que contêm muitos colchetes quadrados. Infelizmente, o SSRS adora reformatar seu código para que bem formados [medidas]. [Somemeasure] se transforme nessa feia fuga da bagunça de caráter [[medidas]]. [Somemeasure]]
Se você editar essa consulta em outra ferramenta, reapare-a novamente ao SSRS, o SSRS não poderá ler essa sintaxe! Mesmo que isso gerem! Portanto, remova todos os suportes quadrados extras e substitua as cotações duplas e o boom, ele funciona novamente e gera seus parâmetros.