我在 SSRS (2008) 中创建了一个报告,该报告的数据来自 MS SQL 中的一个存储过程。
我想要一个多值参数(做了一百万次但不是用 SP)
我已经根据查询创建了参数,勾选了允许多个值并修改了 SP 以使用 IN 语句(所以 IN (@Param))
它只是行不通 SQL Server 探查器显示它已通过
@RC=N'1,2'
如果我选择一个值,它会起作用(返回一个值)
我看过关于拆分加入的帖子,但我已经尝试了所有这些都无济于事。
任何想法(肯定很简单!!)理想情况下 id 也希望能够返回 NULL(或者这要求太多了吗?
谢谢大家
最佳答案
在你的数据库中创建这个函数:
USE [YourDatabase]
GO
/****** Object: UserDefinedFunction [dbo].[SplitListToTable] Script Date: 5/21/2018 8:13:29 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--==========================================================
-- Author: Gugg
-- Created: 2015-10-06
-- Description: Converts a delimited string into a table of values. Based heavily on code from this url:
-- https://social.msdn.microsoft.com/Forums/sqlserver/en-US/0ead7ceb-3fdd-4625-aa82-1d4195f984b1/passing-multivalue-parameter-in-stored-procedure-ssrs
-- Modification History:
--===========================================================
CREATE FUNCTION [dbo].[SplitListToTable]
(
@List NVARCHAR(2000) ,
@SplitOn NVARCHAR(5)
)
RETURNS @RtnValue TABLE
(
Id INT IDENTITY(1, 1) ,
Value NVARCHAR(100)
)
AS
BEGIN
WHILE ( CHARINDEX(@SplitOn, @List) > 0 )
BEGIN
INSERT INTO @RtnValue
( Value
)
SELECT Value = LTRIM(RTRIM(SUBSTRING(@List, 1, CHARINDEX(@SplitOn, @List) - 1)));
SET @List = SUBSTRING(@List, CHARINDEX(@SplitOn, @List) + LEN(@SplitOn), LEN(@List));
END;
INSERT INTO @RtnValue
( Value )
SELECT Value = LTRIM(RTRIM(@List));
RETURN;
END;
GO
然后你可以像这样解析你的参数:
SELECT *
FROM YourDatabase.dbo.YourTable
WHERE YourColumn IN(SELECT value FROM dbo.SplitListToTable(@YourParameter, ','))
关于sql-server - ssrs多值参数存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50449056/