【问题标题】:If-Else Sproc & Calling multi parameter SProc in SSRSIf-Else Sproc & Calling multi parameter SProc in SSRS
【发布时间】:2013-11-20 13:15:10
【问题描述】:

SSRS 中的存储过程相当新。

我已经处理过许多在 SSRS 数据集内直接传递参数的报告,这对我来说有点新,似乎我有点困惑。

我需要合并 2 个布局完全相同的报表,然后根据 SSRS 的下拉选择执行报表。

我的存储过程如下所示。


USE [ReportsDB]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[rpt_WithoutExternalReferences]
(
    @XNumber INT,
    @YNumber INT
)   
AS

BEGIN
SET NOCOUNT ON

IF (@XNumber = NULL)
    BEGIN
        SELECT 
            adviser_account.adviser_account_id,
            dealer.old_system_reference,
            external_reference.external_reference AS Missing_refernce,
            entity.name AS Name,
            entity.given_names As Given_Names,
            entity_address.property_name,
        FROM Composer_adviser_account AS adviser_account
        INNER JOIN Composer_entity AS entity
        ON adviser_account.entity_id = entity.entity_id
        LEFT JOIN Composer_party_external_reference AS external_reference
        ON adviser_account.adviser_account_id = external_reference.party_id  
        WHERE
            external_reference.party_type_id = 3
    END
ELSE
    BEGIN
        IF (@YNumber = NULL)
            BEGIN
                SELECT 
                    dealer.dealer_id,
                    dealer.old_system_reference,
                    dealer.fsa_firm_reference_id as Missing_refernce,
                    entity.name AS Name,
                    entity.given_names AS Given_Names,
                    entity_address.property_name,
                FROM Composer_dealer AS dealer
                INNER JOIN Composer_entity AS entity
                ON dealer.entity_id = entity.entity_id
                INNER JOIN Composer_address AS entity_address
                ON entity.entity_id = entity_address.entity_id
                WHERE dealer.fsa_firm_reference_id IS NULL
            END
        END
    END
END

现在,我想从 SSRS 调用这个存储过程,用户可以在其中选择 XNumber Null 或 YNumber NULL,然后运行相应的代码部分。

任何帮助将不胜感激。

提前致谢。

【问题讨论】:

    标签: tsql stored-procedures reporting-services


    【解决方案1】:

    注意您的NULL 比较:您必须使用IS 关键字,并且应该使您的输入参数可选:

    CREATE PROCEDURE [dbo].[rpt_WithoutExternalReferences]
    (
        @XNumber INT = NULL,
        @YNumber INT = NULL
    )   
    AS BEGIN
    
        SET NOCOUNT ON
    
        IF ((@XNumber IS NULL AND YNumber IS NULL) OR
            (@XNumber IS NOT NULL AND YNumber IS NOT NULL))
            RAISERROR('Invalid arguments', 16, 1);
    
        IF (@XNumber IS NULL) BEGIN
    
            SELECT      adviser_account.adviser_account_id
                        ,dealer.old_system_reference 
                        ,external_reference.external_reference AS Missing_refernce
                        ,entity.name AS Name
                        ,entity.given_names As Given_Names
                        ,entity_address.property_name 
            FROM        Composer_adviser_account AS adviser_account
            INNER JOIN  Composer_entity AS entity
                    ON  adviser_account.entity_id = entity.entity_id
            LEFT JOIN   Composer_party_external_reference AS external_reference
                    ON  adviser_account.adviser_account_id = external_reference.party_id  
            WHERE       external_reference.party_type_id = 3
    
        END ELSE IF (@YNumber IS NULL) BEGIN
    
            SELECT      dealer.dealer_id 
                        ,dealer.old_system_reference 
                        ,dealer.fsa_firm_reference_id as Missing_refernce
                        ,entity.name AS Name
                        ,entity.given_names AS Given_Names
                        ,entity_address.property_name 
            FROM        Composer_dealer AS dealer
            INNER JOIN  Composer_entity AS entity
                    ON  dealer.entity_id = entity.entity_id
            INNER JOIN  Composer_address AS entity_address
                    ON  entity.entity_id = entity_address.entity_id
            WHERE       dealer.fsa_firm_reference_id IS NULL
    
        END
    
    END
    

    【讨论】:

    • 感谢鲁本斯,非常感谢!从 SSRS 调用此 Sproc 的任何帮助,然后用户可以选择 XNumber 作为 Null 或 YNumber 作为 NULL,然后运行相应的代码部分。
    • exec rpt_WithoutExternalReferences NULL, 123; exec rpt_WithoutExternalReferences 123, NULL; ?
    • 感谢 Ruben,但是用户可以选择 XNumber 作为 Null 或 YNumber 作为 Null,并且不能同时选择两个 NULL。不确定我是否在这里正确地提出了我的问题,如果让您更加困惑,对不起!
    • 看来你只是一个IF 声明:如果两者都是NULL(或两者都不是NULL)使用RAISEERROR 来停止执行
    • 抱歉鲁本,不知道在哪里使用这个 IF 语句。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多