多值参数仅显示第一个值

时间:2016-06-03 14:59:25

标签: sql sql-server database stored-procedures ssrs-2008

我有一个SQL Server存储过程,我尝试从中进行SSRS报告。 sp中有一个参数。调用单个值时,该参数在SSRS中起作用。但是,在调用这两个值时,只返回第一个值。 这里有一些重要的东西 - “活跃”'字段是一种数据类型,所以这就是问题最可能出现的地方。

ALTER PROCEDURE [dbo].[USP_RptRC]

@Active VARCHAR(1)

AS
BEGIN
SELECT [Funding]
      ,[4thChar]
      ,REPLACE([Description], CHAR(13) + CHAR(10), '') [Description]
      ,[Comments]
      ,CAST(Active AS VARCHAR(1)) Active
      ,[IsDeleted]
      ,[LastModifiedBy]
      ,[LastModifiedDate]
  FROM [RC]

  WHERE Active IN (@Active)

  END

3 个答案:

答案 0 :(得分:1)

首先你的参数只有1的长度。其次,因为你使用'Where In',你需要做一些额外的工作。我过去也有同样的问题,这篇文章帮助我实现了它。

https://munishbansal.wordpress.com/2008/12/29/passing-multi-value-parameter-in-stored-procedure-ssrs-report/

答案 1 :(得分:0)

由于@Active是VARCHAR(1),如果您总是使用1或0,则可以是CHARINT,您只能传递其中一个值。如果您希望能够在Active为1或0的位置返回,请执行以下操作:

    @Active VARCHAR(1) = NULL
    AS
BEGIN
SELECT [Funding]
      ,[4thChar]
      ,REPLACE([Description], CHAR(13) + CHAR(10), '') [Description]
      ,[Comments]
      ,CAST(Active AS VARCHAR(1)) Active
      ,[IsDeleted]
      ,[LastModifiedBy]
      ,[LastModifiedDate]
  FROM [RC]

    WHERE @Active IS NULL or Active = @Active

然后在您的SSRS报告中,只需将参数的默认值设置为NULL,和/或在参数设置中,允许NULL值以及您明确选择的1和0.当选择NULL时,1和0都是将被退回。当然,您可以将SSRS中的参数选项标记为“All”或“Inactive& Active”,并将NULL作为实际值传递。

答案 2 :(得分:0)

明智的T-SQL - '0,1'不是两个值,它是一个,在你使用它的上下文中它是一个字符串值。但由于您的参数长度(由您)限制为1,因此引擎会修剪第一个字符后的所有内容,以将“0,1”转换为“0”。如果你传递'1,无论如何'你将在你的存储过程中获得'1'。这种方式“只返回第一个”。

但由于@Activebit,您应将其声明为bit。然后在收到NULL的{​​{1}}时更改逻辑以包含适当的记录子集,如下所示:

@Active