我有一个运行存储过程的报告:
EXEC ra_spProjectCalendar @Month, @Year, @ProjectID
ProjectID 是一个多选下拉菜单。选择单个项目时,它工作正常。如果我选择多个项目,我会收到错误:
"Must declare scalar variable "@ProjectID"
当我从“数据”选项卡运行它时,它工作正常,但是,当我将它置于预览模式时,我遇到了问题。
我有一个运行存储过程的报告:
EXEC ra_spProjectCalendar @Month, @Year, @ProjectID
ProjectID 是一个多选下拉菜单。选择单个项目时,它工作正常。如果我选择多个项目,我会收到错误:
"Must declare scalar variable "@ProjectID"
当我从“数据”选项卡运行它时,它工作正常,但是,当我将它置于预览模式时,我遇到了问题。
通过将查询构造为表达式,我得到了类似的工作 - 在您的示例中
="EXEC ra_spProjectCalendar @Month = '" & Parameters!Month.Value & "',@Year='" & Parameters!Year.Value & "',@ProjectID = '" & Join(Parameters!ProjectID.Value, ",") & "'"
目标 SP 中的一些代码将多选字符串拆分为一个临时表,该表用于连接以创建输出。
我不记得为什么我们最终这样做了——那是在我们开始迁移到 SSRS 时,事情已经发生了一些变化——但这可能是你描述的问题。
我发生了同样的错误:必须声明标量变量。
我现在意识到要检查的第一件事是,当您将查询输入为 text 或将存储的 proc 输入为存储的 proc 类型时,ssrs 会自动在数据集属性的参数选项卡中创建参数条目。如果它没有创建它们,它就无法正确读取您的查询。
在我的例子中,我使用 OPENQUERY 来调用分析服务立方体并引用包含大量方括号的字段名。不幸的是,SSRS 喜欢重新格式化您的代码,以便格式良好的“[Measures].[SomeMeasure]”变成这个丑陋的转义字符混乱 [[Measures]].[Somemeasure]]]
If you edit that query in another tool then re-copy it back to ssrs, then ssrs can't read that syntax! Even though it generates it! So remove all the extra square brackets and replace the double quotes and boom it works again and generates your parameters.