0

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,然后运行相应的代码部分。

任何帮助都感激不尽。

提前致谢。

4

1 回答 1

0

注意你的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
于 2013-11-08T13:55:56.737 回答