use*_*949 21 reporting-services
我正在研究SSRS报告,该报告使用包含一些参数的存储过程.我遇到两个参数有问题,因为我想选择多个项目.
这是我所拥有的精简版本:
CREATE PROCEDURE [dbo].[uspMyStoredProcedure]
(@ReportProductSalesGroupID AS VARCHAR(MAX)
,@ReportProductFamilyID AS VARCHAR(MAX)
,@ReportStartDate AS DATETIME
,@ReportEndDate AS DATETIME)
--THE REST OF MY QUERY HERE WHICH PULLS ALL OF THE NEEDED COLUMNS
WHERE DateInvoicedID BETWEEN @ReportStartDate AND @ReportEndDate
AND ProductSalesGroupID IN (@ReportProductSalesGroupID)
AND ProductFamilyID IN (@ReportProductFamilyID)
Run Code Online (Sandbox Code Playgroud)
当我尝试只运行存储过程时,如果我只为1 @ReportProductSalesGroupID
和1 输入值,则只返回值@ReportProductFamilyID
.如果我尝试输入两个SalesGroupID
和/或2 ProductFamilyID
它没有错误,但我什么也没有返回.
-- Returns data
EXEC uspMyStoredProcedure 'G23', 'NOF', '7/1/2009', '7/31/2009'
-- Doesn't return data
EXEC uspMyStoredProcedure 'G23,G22', 'NOF,ALT', '7/1/2009', '7/31/2009'
Run Code Online (Sandbox Code Playgroud)
在SSRS中,我收到一条错误消息:
','附近的语法不正确
看来,
分隔符包含在字符串中而不是分隔符中
cod*_*ike 40
你需要三件事:
在SSRS数据集属性中,将多值param作为逗号分隔的字符串传递给存储过程
=Join(Parameters!TerritoryMulti.Value, ",")
Run Code Online (Sandbox Code Playgroud)在Sql Server中,您需要一个表值函数,可以将逗号分隔的字符串拆分回迷你表(例如,请参见此处)
在存储过程中,有一个where子句,如下所示:
WHERE sometable.TerritoryID in (select Item from dbo.ufnSplit(@TerritoryMulti,','))
Run Code Online (Sandbox Code Playgroud)
... STRING_SPLIT
你在步骤2中的分裂功能在哪里.
(我的博客中的完整步骤和代码发布' SSRS多值参数,失败少 '):
小智 6
我们假设您有一个多值列表 @param1
在您的SSRS报告上创建另一个内部参数@param2
,并将默认值设置为:
=Join(Parameters!param1.value, 'XXX')
Run Code Online (Sandbox Code Playgroud)
XXX
可以是你想要的任何分隔符,除了逗号(见下文)
然后,您可以传递@param2
给您的查询或存储过程.
如果您尝试以任何其他方式执行此操作,则会导致使用逗号分隔参数的任何字符串函数失败.(例如CHARINDEX,REPLACE).
例如,Replace(@param2, ',', 'replacement')
将无法正常工作.最终会出现"替换函数需要3个参数"之类的错误.
归档时间: |
|
查看次数: |
46334 次 |
最近记录: |