具有多个SELECT和报告服务的存储过程

时间:2011-07-26 09:07:54

标签: sql-server stored-procedures reporting-services

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

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的数据中,当我通过感叹号填充正确的参数时,我检索到了良好的SELECT,但在Dataset View中,我只检索了第二个SELECT,因此预览失败:(

如何设置数据集以考虑SELECT的这个开关?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

一个月前我做到了这一点。

您需要做的是使用报告的“数据集”节点的“字段”节点手动将字段添加到XML,然后使用其所有参数调用存储过程。您将希望隐藏任何在特定方案中无法获得值的列,或者它们将显示“#ERROR”。

    <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>

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