[英]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.