我一直使用 SP 中的参数来拉取 SSRS 中的多个结果集。
您必须通过 SP 中的 IF 语句将它们分开,然后您必须在 SSRS 数据集设置中手动输入字段。
看起来很奇怪,但它确实有效......
这是一个例子。
存储过程(SP) 定义了 2 个参数
@OfficerID
@DatasetFlag
@OfficerID 是必须通过或输入的员工编号(SSRS 数据输入表单)
DatasetFlag 是我控制在 SP 中执行哪个 IF 语句的方式。
所以这里是 SP:
CREATE PROCEDURE [dbo].[StoredProcedureNameHere]
@OfficerID VARCHAR(7),
@DatasetFlag VARCHAR(60)
WITH RECOMPILE
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SET NOCOUNT ON;
BEGIN TRY
IF @DatasetFlag = 'EmployeeName'
Begin
SELECT [EmployeeName]
FROM [DatabaseName].[scema].[Employee]
where EmployeeBNumber = @OfficerID
END
ELSE
IF @DatasetFlag = 'Expect'
Begin
SELECT
[TerritoryName]
,[TestNumber]
,[RuleNumber]
,[Expectation]
,[TestCount]
,[PercentToGoal]
FROM [Database].[scema].[Table2]
WHERE OfficerID = @OfficerID
ORDER BY TerritoryID
,TestNumber
,RuleNumber
END
RETURN
GO
报告有 2 个数据集,一个是我创建的,它将拉入参数和 EmployeeName
我创建的另一个它会拉入 EmployeeName,因为 SSRS 只能使用 1 个结果集~!
但是....我把它骗了....
但我通过 OVERTYPING EMPLOYENAME 来简单地创建字段,然后添加
rest (Query) 所以编辑 DATASET 的 PROPERTIES 中的 FIELDS 并放入 Select Column Names。
然后我在 PARAMETERS 菜单(数据集属性)中输入 ="EmployeeName" 的表达式
第一个数据集和第二个“期望”。我也在那个屏幕上匹配了@OfficeID。
然后当我运行它时...它要求提供 OfficerID(RS 创建输入表单)
当我输入 ID 并点击查看报告时。或者,我们可以像 SSRS 表单一样,使用 OfficeID 的所有 RDL,但在 ASPX 页面中。
返回两个数据集(它调用了两次是我的假设)
因此,我必须在 SSRS 中处理 UNION 数据集或其他技巧,这并不有趣……(真的是 IIF?)
我看到一个存储过程,我们有 20 个参数,所以你可以过滤
SQL 级别的报表输出,而不是报表中的怪物拉取和过滤。
不,你可以简单地创建 20 个存储过程,好吧,但是这样,所有的代码都在一个位置,当然它可以使用选择到 TEMP 表中来合并大量的东西,
最后简单地填充一个作为结果集的表..
作为一名程序员,我觉得 SSRS 有点古怪,但到目前为止,我很开心,试图找到获得我想要的东西的方法,而不是它提供的东西......