【问题标题】:Multiple value parameter only showing first value多值参数仅显示第一个值
【发布时间】:2016-06-03 14:59:24
【问题描述】:

我有一个 SQL Server 存储过程,我正在尝试从中生成 SSRS 报告。 sp里面有一个参数。该参数在调用单个值时在 SSRS 中起作用。但是,当调用这两个值时,只返回第一个。 这里有一点很重要——“Active”字段是一种位数据类型,所以这很可能是问题所在。

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

【问题讨论】:

  • 你是否像EXEC [dbo].[USP_RptRC] '0,1'一样调用proc?
  • 在数据集属性中,我使用的是查询类型的存储过程。

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


【解决方案1】:

首先,您的参数长度仅为 1。其次,由于您使用的是“Where In”,因此您需要做一些额外的工作。我过去也遇到过同样的问题,这篇文章帮助我解决了问题。

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

【讨论】:

    【解决方案2】:

    由于@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 作为实际值传递。

    【讨论】:

      【解决方案3】:

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

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

      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 1 = CASE WHEN @Active IS NULL THEN 1 ELSE
              CASE WHEN Active = @Active THEN 1 ELSE -1
      END
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-27
        • 1970-01-01
        • 2013-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多