簡體   English   中英

在 T-SQL 存儲過程的參數中將 NULL 作為值傳遞

[英]Passing NULL as Value in Parameter for T-SQL stored procedure

我有這個存儲過程,我向它傳遞了一個可能為 NULL 的日期參數。 我試圖得到的邏輯是,當 Date 參數為 NULL 時,應選擇日期列的最大值,但當參數不為 NULL 時,應將參數作為值傳遞。

CREATE PROCEDURE [rdm].[Param_Load_Test2] 
    @Retro_Date DATE
AS
BEGIN
    SELECT 
        CASE  
           WHEN @Retro_Date IS NULL 
              THEN MAX(lnd.FILE_DATE) 
              ELSE @Retro_Date 
        END AS TEST_DATE
    INTO 
        #LoadTest1234
    FROM 
        TWV.TABLE_WITH_VALUES AS lnd
    GROUP BY 
        FILE_DATE;

    SELECT TEST_DATE 
    FROM #LoadTest1234  
END
GO

現在,當我使用 EXEC 語句為 NULL 情況測試上述代碼時,我得到了錯誤的值。 Not NULL 情況下工作正常。

EXEC rdm.Param_Load_Test2 NULL

>> 2018-03-31
>> 2018-05-31

我只期待一個值為 2018-05-31 的值,但它返回 2 條記錄。 我究竟做錯了什么 ?

你有一個多余的GROUP BY 我想你想要:

        SELECT MAX(CASE WHEN @Retro_Date IS NULL THEN lnd.FILE_DATE ELSE @Retro_Date END) AS TEST_DATE
         INTO #LoadTest1234
         FROM TWV.TABLE_WITH_VALUES as lnd;

或者更簡單:

        SELECT COALESCE(@Retro_Date, MAX(lnd.FILE_DATE)) AS TEST_DATE
        INTO #LoadTest1234
        FROM TWV.TABLE_WITH_VALUES as lnd;

我不確定您為什么要為此使用臨時表。 但我猜這是更復雜邏輯的一部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM