SSRS 2005将参数传递给SQL Server 2000存储过程

时间:2012-08-23 15:06:28

标签: tsql reporting-services sql-server-2000

下面是我在网上找到的一个例子构建的代码,我找不到链接,但代码在这个堆栈溢出问题的答案中被引用:Passing multiple values for a single parameter in Reporting Services

这是我现在在我的存储过程中使用的SQL代码,这是一个很长的过程,所以我把它归结为我正在处理的部分,并添加了DECLARE和{{1对于SET,它们作为参数从SSRS传递,以使代码段运行。

@EMPLOYEES

我有6组多值,所有这些都运行良好,直到我发现报告丢失了大部分员工数据,我发现DECLARE @EMPLOYEES varchar(8000) -- EMPLOYEES is a comma separated list of EMPLOYEE IDS -- FROM SSRS Report Parameters. Each ID is 12 characters -- And there are 806 Employees to choose from, which -- when all are selected, the Comma separated string grows -- to 11,193 characters, much longer than 8000 SET @EMPLOYEES = 'EMP000000001,EMP000000002,EMP000000003' CREATE TABLE #EMPLOYEEIDS ( EMPLOYEEID varchar(100) NOT NULL ) DECLARE @CharIndex AS int DECLARE @Piece AS varchar(100) -- FILL THE #EMPLOYEEIDS TABLE WITH THE COMMA SEPARATED EMPLOYEE IDS SELECT @CharIndex = 1 WHILE @CharIndex > 0 AND LEN(@EMPLOYEES) > 0 BEGIN SELECT @CharIndex = CHARINDEX(',', @EMPLOYEES) IF @CharIndex > 0 SELECT @Piece = LEFT(@EMPLOYEES, @CharIndex - 1) ELSE SELECT @Piece = @EMPLOYEES INSERT INTO #EMPLOYEEIDS (EMPLOYEEID) VALUES (@Piece) SELECT @EMPLOYEES = RIGHT(@EMPLOYEES, LEN(@EMPLOYEES) - @CharIndex) END SELECT * FROM #EMPLOYEEIDS DROP TABLE #EMPLOYEEIDS 在选择所有数据时溢出员工对报告参数(其中有800多个)。报告将运行,SQL会很乐意将VARCHAR(8000)截断为8000个字符,并且不会解析四分之一的IDS。

所以我尝试将VARCHAR切换到文本字段,当字段设置为TEXT时,没有任何解析函数可以工作。我收到如下错误:

  

Msg 8116,Level 16,State 2,Procedure usp_QualityMonitoring_AllProfiles_SelectWithParameters,Line 89
  参数数据类型文本对于左函数的参数1无效。

这是可以理解的,我知道许多与VARCHAR一起使用的功能不适用于VARCHAR。因此,当我使用TEXT时,SQL会截断8000个字符后的所有内容,如果我将其切换到VARCHAR,则该过程将不会运行。

  • 我还有哪些其他选项可以将多值参数从SSRS传递到可以支持这么多选项的SQL Server存储过程?
  • 或者有没有办法修复存储过程中的代码来解析TEXT而不是TEXT

注意:我原本以为运行Stored Proc的SQL Server是2005,但我确定它不是:

VARCHAR

0 个答案:

没有答案