1

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

我的代码看起来像这样:

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

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

参数

参数的可用值

查询中的值

设计视图

第 5 张图片

更新:我创建了另一个存储过程,因为没有其他选择。现在我的问题是,如何将第二个存储过程值传递给 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。

4

2 回答 2

0

我最终使用了一个独立的 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
于 2016-07-12T20:28:05.597 回答
0

将此存储过程用作UserID参数可用值的来源,并确保UserID参数位于参数之后ReportDate。然后在UserID用户选择之后才会填充可用值ReportDate。然后此过程将使用用户选择的ReportDate.

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

关于这个错误:

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

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

于 2016-07-08T18:49:44.267 回答