sql - SSRS 多值参数
问题描述
ALTER PROC [dbo].[spIVDiscre]
@Value varchar(10) = '1,2'
as
BEGIN
SELECT
'0' as Value ,
pn.No_,
[Address Code] = pn.[Address Code],
[Contact] = pn.[Phone No_],
[Partner Name] = pn.[Name],
[Partner Name 2] = pn.[Name 2],
[PledgeType] = pdl.[PledgeType],
[Address] = pn.[Address]
INTO #Temp110
FROM dbo.[Product Line] pdl WITH (NOLOCK)
INNER JOIN [Pledges] pl WITH (NOLOCK)
ON pdl.[Pledge ID]=pl.ID
LEFT JOIN [dbo].[Contact] pn with (NOLOCK)
on pdl.[No_] = pn.No_
LEFT join [dbo].[Country_Region] co WITH (NOLOCK)
on pn.[Country_Region Code] = co.Code
LEFT JOIN
(
SELECT
cast(Value as int) as Code,
Value2 as Description
FROM Config WITH (NOLOCK)
WHERE
Category='Children'
AND SubCategory='Status'
AND DATEDIFF(dd,GETDATE(),ISNULL(ObsoleteDate,DATEADD(dd,1,GETDATE())))>0
) childstatus
on c.StatusID = childstatus.Code
END
--------------------------------------- @ListA------------------------------------------
IF @Value='1' --ListA
BEGIN
INSERT INTO #Temp110
SELECT
--iList = CAST (@iList as int ) ,
@Value as Value ,
pn.No_,
[Address Code] = pn.[Address Code],
[Contact] = pn.[Phone No_],
[Partner Name] = pn.[Name],
[Partner Name 2] = pn.[Name 2],
[PledgeType] = pdl.[PledgeType],
[Address] = pn.[Address]
FROM dbo.[Product Line] pdl WITH (NOLOCK)
INNER JOIN [Pledges] pl WITH (NOLOCK)
ON pdl.[Pledge ID]=pl.ID
LEFT JOIN [dbo].[Contact] pn with (NOLOCK)
on pdl.[No_] = pn.No_
LEFT join [dbo].[Country_Region] co WITH (NOLOCK)
on pn.[Country_Region Code] = co.Code
LEFT JOIN
(
SELECT
cast(Value as int) as Code,
Value2 as Description
FROM Config WITH (NOLOCK)
WHERE
Category='Children'
AND SubCategory='Status'
AND DATEDIFF(dd,GETDATE(),ISNULL(ObsoleteDate,DATEADD(dd,1,GETDATE())))>0
) childstatus
on c.StatusID = childstatus.Code
WHERE
(pdl.[Pledge Status] = '2' and c.StatusID ='4')
or (pdl.[Pledge Status] = '2' and c.StatusID ='7')
END
-------------ListB---------------------
IF @Value='2' --ListB
BEGIN
INSERT INTO #Temp110
SELECT
--iList = CAST (@iList as int ) ,
@Value as Value ,
pn.No_,
[Address Code] = pn.[Address Code],
[Contact] = pn.[Phone No_],
[Partner Name] = pn.[Name],
[Partner Name 2] = pn.[Name 2],
[PledgeType] = pdl.[PledgeType],
[Address] = pn.[Address]
FROM dbo.[Product Line] pdl WITH (NOLOCK)
INNER JOIN [Pledges] pl WITH (NOLOCK)
ON pdl.[Pledge ID]=pl.ID
LEFT JOIN [dbo].[Contact] pn with (NOLOCK)
on pdl.[No_] = pn.No_
LEFT join [dbo].[Country_Region] co WITH (NOLOCK)
on pn.[Country_Region Code] = co.Code
LEFT JOIN
(
SELECT
cast(Value as int) as Code,
Value as Description
FROM Config WITH (NOLOCK)
WHERE
Category='Children'
AND SubCategory='Status'
AND DATEDIFF(dd,GETDATE(),ISNULL(ObsoleteDate,DATEADD(dd,1,GETDATE())))>0
) childstatus
on c.StatusID = childstatus.Code
WHERE
(pdl.[Pledge Status] = '2' and c.StatusID ='3')
or (pdl.[Pledge Status] = '2' and c.StatusID ='6')
END
select * from #Temp110
where Value in (select Value2 from [fnDiscre] ('1,2,3', ','))
这是 SPLIT() 函数
Alter FUNCTION [dbo].[fnIVDiscre]
( @string varchar(4000))
Returns
@Result Table (Value varchar(100))
As
Begin
declare @len int, @loc int = 1
While @loc <= len(@string)
Begin
Set @len = CHARINDEX(',', @string, @loc) - @loc
If @Len < 0 Set @Len = len(@string)
Insert Into @Result Values (SUBSTRING(@string,@loc,@len))
Set @loc = @loc + @len + 1
End
Return
End
我有一个参数@Value,并将其在数据集中的值设置为 =Join(Parameters!Value.Value,",")。
只要用户选择一个 Value ,它就可以工作,但只要选择多个 Value 就根本不起作用。它运行,但不显示任何数据。例如,如果我选择“值 1”,它会显示“值 1”信息。但是,如果我选择“值 1”和“值 2”,则什么都不会显示。
任何想法为什么这不起作用?非常感谢
解决方案
除非我错过了什么......
根据默认参数值的建议,您正在将逗号分隔的值列表传递给存储的过程
@Value varchar(10) = '1,2'
然后检查参数值是“1”还是“2”,但如果传入“1,2”,它永远不会只是“1”或“2”。
您需要拆分传入的字符串,然后检查结果。顺便说一句,您可能可以使用内置string_split()
功能。
所以像这样。
DECLARE @Value varchar(10) = '1,2'
DECLARE @ParamValues TABLE (pValue varchar(10))
INSERT INTO @ParamValues
SELECT * FROM string_split(@value, ',')
然后您的测试将从更改IF @Value='1' --ListA
为
IF EXISTS(SELECT * FROM @ParamValues WHERE pValue = 1) -- ListA
BEGIN
... your exsiting code block
END
并重复2
推荐阅读
- excel - 用于循环计算、复制、粘贴和重复数据数组的过程的 VBA 代码
- java - 在 application.yml 中加密 RSA 公钥
- python - 如何使用 Tkinter 请求数独游戏输入
- python - 带有按钮的 Plotly 中的图工厂热图
- java - 如何在 Spring JPA/Hibernate 中来自不同方案的两个表之间建立外键关系
- java - Spring JPA:PropertyReferenceException:找不到类型的属性 findAll
- html - HTML 选择框和选择性重定向
- javascript - 如何使用 javascript 在 onclick 事件上显示随机 html 文件?
- javascript - 属性为字符串时出现 onClick 问题
- http - 如何在地图中转换 http.MultipartRequest POST 方法的响应
在颤振?