Sql server 具有多个选择和报告服务的存储过程

Sql server 具有多个选择和报告服务的存储过程,sql-server,stored-procedures,reporting-services,Sql Server,Stored Procedures,Reporting Services,我在报告服务方面遇到了大麻烦。 我需要使用一个带有2个参数2 id的存储过程。 如果填充了第一个参数,则启动选择。 如果填入第二个参数,则启动另一个选择 CREATE Procedure apGetEvrPourRapport @id_exu int, @id_exd int AS BEGIN IF isnull(@id_exu, 0) > 0 print 'id_exu : ' + cast(@id_exu as nvarchar(16)) BEGIN

我在报告服务方面遇到了大麻烦。 我需要使用一个带有2个参数2 id的存储过程。 如果填充了第一个参数,则启动选择。 如果填入第二个参数,则启动另一个选择

CREATE Procedure apGetEvrPourRapport
@id_exu int, @id_exd int
AS
BEGIN
  IF isnull(@id_exu, 0) > 0
    print 'id_exu : ' + cast(@id_exu as nvarchar(16))
    BEGIN
        EXEC apReport_Extrait_Lecture_Filtre @id_exu, null
    END
-- Cas du document unique et document de travail
  IF isnull(@id_exd, 0) > 0
    print 'id_exd : ' + cast(@id_exd as nvarchar(16))
    BEGIN
               --EXEC another sp
    END
END
在Report Services的数据中,当我在执行时用感叹号填充正确的参数时,我检索到正确的选择,但在数据集视图中,我只检索到第二个选择,因此预览失败:

如何设置数据集以考虑选择的切换


谢谢你的帮助。

大约一个月前我就这么做了

您需要做的是使用报表的Dataset节点的fields节点将字段手动添加到XML中,然后使用其所有参数调用存储过程。您需要隐藏在特定场景中无法获取值的任何列,否则它们将显示错误

    <Field Name="status">
      <DataField>status</DataField>
      <rd:TypeName>System.Byte</rd:TypeName>
    </Field>
    <Field Name="longname">
      <DataField>longname</DataField>
      <rd:TypeName>System.String</rd:TypeName>
    </Field>
    <Field Name="name">
      <DataField>name</DataField>
      <rd:TypeName>System.String</rd:TypeName>
    </Field>

您将无法在设计器中再次修改数据集,否则它将删除您的字段和/或不保存。但是,您仍然可以在设计器中修改报表的其他部分。

我更新了我的帖子,以考虑到您正在调用存储过程。填充数据集很无聊。但它起作用了。谢谢您: