0

私はこのストアドプロシージャを持っています

ALTER PROCEDURE [dbo].[usp_mySP]
    -- Add the parameters for the stored procedure here
    -- For inventory table check.
    @DealerID       VARCHAR(50),
    @Certified      VARCHAR(50) = NULL,
    -- For fuel value.
    @CityFeatureValue   VARCHAR(50),
    @HwyFeatureValue    VARCHAR(50)

AS
BEGIN
        BEGIN
        SELECT  InventoryID, 
                VIN
        FROM    Inventory
        WHERE   DealerID = @DealerID
                AND Deleted     =   'False'
                AND (IsPending  =   '0'         OR IsPending    IS NULL) 
                --AND (Certified    =   @Certified  OR @Certified   IS NULL)

                AND VIN IN
                        (
                            SELECT      VIN 
                            FROM        FuelPerformance
                            WHERE       (
                                            FeatureTitle = 'Fuel Economy (City)' 
                                            AND FeatureValue = @CityFeatureValue
                                        )
                                        OR 
                                        (
                                            FeatureTitle = 'Fuel Economy (Hwy)' 
                                            AND FeatureValue = @HwyFeatureValue
                                        )
                            GROUP BY    VIN
                            HAVING      COUNT(VIN) > 1
                        )
    END
END

私はそれを次のように呼んでいます:

EXEC usp_ListOfVehiclesOnFuelCondition_ForSingleDealer
   '09f5245d' , '', '18', '28'

行にコメントしているとき

 AND (Certified = @Certified OR @Certified IS NULL)

結果が得られますが、この行がある場合、結果は空白になります。

私が間違っている提案はありますか?

4

1 に答える 1

5

空の文字列 ( '') を渡しています。それは とは大きく異なりNULLます。

パラメーターを名前付きパラメーター ( なし@Certified) として渡すか、空の文字列をテストするか、NULL.

名前付きパラメーター:

EXEC usp_ListOfVehiclesOnFuelCondition_ForSingleDealer @DealerId = '09f5245d',
                                                       @CityFeatureValue = '18', 
                                                       @HwyFeatureValue = '28'

を渡すNULL

EXEC usp_ListOfVehiclesOnFuelCondition_ForSingleDealer '09f5245d', 
                                                       NULL, 
                                                       '18', 
                                                       '28'

チェック中'':

AND (Certified = @Certified OR @Certified IS NULL OR @Certified = '')
于 2012-12-26T13:56:09.553 に答える