微软表示,使用存储过程时,你不能让Report Builder 2.0中的一个参数的多个值。 https://technet.microsoft.com/en-us/library/Dd207127(v=SQL.100).aspx
我无法找到一个类似的声明报表生成器3.0。 如何报表生成器发送包含在多项选择的参数存储过程中的数据? 看来在这个职位上它通过他们作为一个字符串,是这样吗? https://www.mssqltips.com/sqlservertip/2844/working-with-multiselect-parameters-for-ssrs-reports/
这似乎太复杂unparse由报表生成器发送到数据库的字符串的方法。
这似乎表可以作为参数在SQL Server 2008被传递到存储过程: 如何通过一个数组存储过程的SQL Server有没有办法从报表生成器3.0传递一个表到SQL Server 2008?
是的,它可以使用。 我发现这样做是,stucture你的存储过程,这样的变量是VARCHAR(MAX),最简单的方法,并在where子句中使用的inclause。 然后使用另一个存储过程打破了将要传递的逗号分隔的变量。
Example
@States = 'CA,NM,NY'
Select *
from Table
Where State in (Select CSVResults from parsecsv(@States,',')
这是假设,当然你有一个叫做Parsecsv功能。 如果你需要一个我使用。
CREATE FUNCTION [dbo].[ParseCSV] (@CSV_STR VARCHAR(8000),@Delimiter varchar(20) )
RETURNS @splittable TABLE (ID int identity(1,1), CSVvalues VARCHAR(256) )
AS
BEGIN
-- Check for NULL string or empty sting
IF (LEN(@CSV_STR) < 1 OR @CSV_STR IS NULL)
BEGIN
RETURN
END
; WITH csvtbl(i,j)
AS
(
SELECT i=1, j= CHARINDEX(@Delimiter,@CSV_STR+@Delimiter)
UNION ALL
SELECT i=j+1, j=CHARINDEX(@Delimiter,@CSV_STR+@Delimiter,j+1)
FROM csvtbl
WHERE CHARINDEX(@Delimiter,@CSV_STR+@Delimiter,j+1) <> 0
)
INSERT INTO @splittable ( CSVvalues)
SELECT LTRIM(RTRIM(SUBSTRING(@CSV_STR,i,j-i)))
FROM csvtbl OPTION (MAXRECURSION 32767)
RETURN
END
文章来源: Can “allow multiple values” for parameters be used with stored procedures in Report Builder 3.0?