Microsoft表示,在使用存储过程时,不能允许报表生成器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/
对于解析报表生成器发送到数据库的字符串来说,这似乎太复杂了。
表似乎可以作为参数传递到Server 2008中的存储过程中:How to pass an array into a SQL Server stored procedure 是否有一种将表从报表生成器3.0传递到Server 2008的方法?
发布于 2015-07-30 18:29:05
是的可以用。我找到的最简单的方法是,构造sproc,这样变量就是VARCHAR(MAX),where子句使用in子句。然后使用另一个sproc来拆分将传递的逗号分隔变量。
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 https://stackoverflow.com/questions/31731193
复制相似问题