本帖最后由 James.Lv 于 2023-1-5 18:47 编辑
在使用存储过程返回结果作为报表数据集时,经常会用到多个参数值的场景。
例如,需要用存储过程从销售明细表中,根据销售大区和支付方式返回查询结果。
其中:销售大区和支付方式也均为多值参数。
此种场景的核心是对参数中in值的处理。
1.首先查看数据结构;
2.在数据库中定义处理参数值的函数和存储过程;
由于参数值的为:'西北,华北',需要用自定义函数处理成 '西北','华北';
自定义参数脚本:
create function [dbo].[f_split](@c varchar(2000),@split varchar(2))
returns @t table(col varchar(20))
as
begin
while(charindex(@split,@c)<>0)
begin
insert @t(col) values (substring(@c,1,charindex(@split,@c)-1))
set @c = stuff(@c,1,charindex(@split,@c),'')
end
insert @t(col) values (@c)
return
end
存储过程脚本:
create proc [dbo].[sp_qry_sales]
(
@area nvarchar(255)
,@province nvarchar(255)
)
as
select * from Demo_销售明细
where 1=1
and 销售大区 in (select * from f_split(@area,',') )
and 支付方式 in (select * from f_split(@province,',') )
3.创建报表,在报表中创建内嵌数据集和参数;
3.1新建两个数据集分别获取销售大区和支付方式,作为参数可选值;
销售大区:select distinct 销售大区 from Demo_销售明细
支付方式:select distinct 支付方式 from Demo_销售明细
3.2 添加报表参数,并将上一步的数据集结果分别做为报表参数的可选值。
3.3调用存储过程,编写返回数据的数据集。
调用存储过程:exec sp_qry_sales @p1, @p2 其中:两个参数的参数值需使用Join函数用逗号进行数组拼接,=Join(Parameters!多值参数1.Value,",")
4.预览查看报表。
|