【问题标题】:How to retrieve a parameter value based on a result set from stored procedure in SSRS 2014?如何根据 SSRS 2014 中存储过程的结果集检索参数值?
【发布时间】:2016-11-11 10:02:49
【问题描述】:

我想知道如何根据存储过程的结果集选择参数。

我的代码如下所示:

CREATE PROCEDURE usp_UserInformation (@ReportRunDate DATE = NULL) 
AS
WITH CTE AS (
SELECT -- some fields
FROM Table1 INNER JOIN Table2 ON Table1.ID = Table2.ID
WHERE RegisteredDate = DATEADD(MONTH, DATEDIFF(MONTH, -1, @ReportRunDate) - 2, -1)
--I'll output the result set after applying all the logic like

SELECT UserID, UserName, DOJ
FROM CTE

现在,当用户在报告中选择日期时,我创建了另一个参数并尝试使用“从查询中获取值”从“可用值”中检索记录。我想显示上述查询结果集中的 UserID 列表,并允许用户基于此进行 SELECT。

更新:我已经创建了另一个存储过程,因为没有其他选择。现在我的问题是,如何将第二个存储过程值传递给 WHERE 子句中的第一个值?

CREATE PROCEDURE usp_UserInformation (@ReportRunDate DATE = NULL) 
AS
WITH CTE AS (
SELECT -- some fields
FROM Table1 INNER JOIN Table2 ON Table1.ID = Table2.ID
WHERE RegisteredDate = DATEADD(MONTH, DATEDIFF(MONTH, -1, @ReportRunDate) - 2, -1)
--I'll output the result set after applying all the logic like

SELECT User_ID, UserName, DOJ
FROM CTE
WHERE User_ID = EXEC usp_Get_UserID

我正在寻找这样的东西,用户可以先选择 ID,然后在报告中选择他选择的任何日期。

PS:我不允许编写内联 SQL,只允许使用 SP。我不想为同一个报告创建两个 SP。

【问题讨论】:

    标签: reporting-services sql-server-2014 business-intelligence ssrs-2014


    【解决方案1】:

    将此存储过程用作UserID 参数的可用值的来源,并确保UserID 参数ReportDate 参数之后出现。然后在用户选择ReportDate 之前,不会填充UserID 可用值。然后此过程将使用用户选择的ReportDate 运行。

    我还认为您需要从 DataSet 参数中删除 @User_ID 参数(最后一个屏幕截图)。您的存储过程只有一个ReportRunDate 参数。您的 SSRS 数据集中的参数必须与您正在调用的存储过程中的参数匹配。

    关于这个错误:

    服务器没有提供有意义的回复;这可能是由 合同不匹配、会话过早关闭或内部 服务器错误。

    听起来您的存储过程代码在您上次编辑 SSRS 报告后发生了更改,现在它没有返回预期值。使用探查器跟踪查看从 SSRS 发送到 SQL Server 的命令,然后在 SSMS 中执行该命令并查看结果。返回的列名是什么?它们在数据集的 Fields 选项卡中的名称是否相同?它们与您的报告参数中的Value FieldLabel Field 名称相同吗?

    【讨论】:

    • 我试过了,但没用。 UserID 下拉列表显示了一些在 SP 的实际结果集中不存在的数字(例如 -1 值或一些 0)。此外,选择“可用值”选项来检索用户 ID 需要很长时间才能加载到 SSRS 的下拉列表中。
    • 好的,我已经在我的 OP 中添加了屏幕截图。
    • 我在 OP 末尾添加了另一个屏幕截图。你在说这个吗?
    • 当我在 SSMS 中运行存储过程时,我得到了整个结果集(需要什么)。当我尝试根据 ID 在报告中过滤掉它时,它不起作用。刷新时,我收到错误 数据集“@User_ID”中用于参数“@User_ID”的表达式引用了一个字段。查询参数表达式中不能使用字段.
    • 您为@User_ID 参数的值使用的表达式是什么?您的屏幕截图仅显示 <<Expr>>
    【解决方案2】:

    我最终使用了一个独立的 SQL,并听取了许多专家的建议,以获得 User_ID。我在存储过程中添加了另一个参数,并将第二个值从独立 SQL 传递给参数。

    CREATE PROCEDURE usp_UserInformation (@ReportRunDate DATE = NULL, @User_ID VARCHAR(10)) 
    AS
    WITH CTE AS (
    SELECT -- some fields
    FROM Table1 INNER JOIN Table2 ON Table1.ID = Table2.ID
    WHERE RegisteredDate = DATEADD(MONTH, DATEDIFF(MONTH, -1, @ReportRunDate) - 2, -1)
    AND UserID = @User_ID
    --I'll output the result set after applying all the logic like
    
    SELECT UserID, UserName, DOJ
    FROM CTE
    

    而且,我的独立 SQL 看起来像:

    SELECT DISTINCT User_ID
    FROM MyTable
    ORDER BY User_ID
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-14
      • 2021-03-22
      • 2018-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-03
      相关资源
      最近更新 更多