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

Tsql SSRS 2005将参数传递到SQL Server 2000存储过程,tsql,reporting-services,sql-server-2000,Tsql,Reporting Services,Sql Server 2000,下面是我根据在线找到的示例生成的代码,我找不到链接,但该代码在有关堆栈溢出问题的答案中引用: 这是我现在在存储过程中使用的SQL代码,它是一个很长的过程,所以我将其总结为我正在处理的部分,并为@EMPLOYEES添加了声明和设置,它们作为参数从SSR传递,以使代码段运行 DECLARE @EMPLOYEES varchar(8000) -- EMPLOYEES is a comma separated list of EMPLOYEE IDS -- FROM SSRS Report Para

下面是我根据在线找到的示例生成的代码,我找不到链接,但该代码在有关堆栈溢出问题的答案中引用:

这是我现在在存储过程中使用的SQL代码,它是一个很长的过程,所以我将其总结为我正在处理的部分,并为
@EMPLOYEES
添加了
声明
设置
,它们作为参数从SSR传递,以使代码段运行

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
我有6组多值,它们都工作得很好,直到我发现报告缺少员工的大部分数据,我发现在选择报告参数上的所有员工时,
VARCHAR(8000)
溢出(超过800个)。报告将运行,SQL将愉快地将
VARCHAR
截断为8000个字符,四分之一的ID未被解析

因此,我尝试将
VARCHAR
切换到文本字段,当字段设置为文本时,解析函数都不起作用。我得到如下错误:

Msg 8116,第16级,状态2,程序usp\u质量监控\u所有配置文件\u选择参数,第89行
参数数据类型文本对于左函数的参数1无效

这是可以理解的,我知道许多使用
VARCHAR
的函数将无法使用
TEXT
。因此,当我使用
VARCHAR
时,SQL会截断8000个字符之后的所有内容,如果我将其切换到
TEXT
,则该过程将永远不会运行

  • 要将多值参数从SSR传递到可以支持这么多选项的SQL Server存储过程,我还需要哪些其他选项
  • 或者是否有一种方法可以修复存储过程中的代码,从而通过
    TEXT
    而不是
    VARCHAR
    进行解析
注意:我最初认为运行存储过程的SQL Server是2005,但我确定它不是:

SELECT @@VERSION
-- Microsoft SQL Server  2000 - 8.00.2039 (Intel X86)   May  3 2005 23:18:38   Copyright (c) 1988-2003 Microsoft Corporation  Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2) 

在SQL2005>VARCHAR(MAX)中使用新类型怎么样?为什么不使用
VARCHAR(MAX)
而不是
TEXT
??它支持高达2GB(20亿个字符!)的文本,以及任何
varchar
列支持的所有函数……我尝试了varchar(MAX)但它不起作用,收到一个错误,抱怨“MAX”是一个未知的废话,所以我做了一个选择@版本,我意识到我正在使用SQL Server 2000。我将改变这个问题,以反映出你面临的问题是:SSRS 2000实际上是该产品的1.0版,即使在较新的版本中,SSRS在多值参数中的选项列表非常长时也存在问题。如果是我的报告,我会想办法改变参数,不必单独指定每个员工:您可以选择范围内的部门或ID吗?SSRS是版本2005,包含我报告的数据的SQL Server是2000。在参数中有一个向下钻取,其中可以选择经理,并且经理的数量远少于员工,然后参数选择的选项更少。因此,他们不太可能选择所有的经理,然后是所有的员工。但是在我的测试中,我选择全部,如果他们真的做出这些选择,我应该能够处理所有这些。所以在生产现实中,这可能不会是一个问题,但在可能性领域,这是一个问题。