Передача NULL в качестве значения в параметре для хранимой процедуры T- SQL - PullRequest
0 голосов
/ 07 января 2020

У меня есть эта хранимая процедура, которой я передаю параметр даты, который может быть NULL. Логика c Я пытаюсь понять, когда параметр 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

Теперь, когда я тестирую приведенный выше фрагмент кода с помощью оператора EXE C для случая NULL, я получаю неправильные значения. Случай Not NULL работает нормально.

EXEC rdm.Param_Load_Test2 NULL

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

Я ожидаю только одно значение, которое является 2018-05-31, но оно возвращает 2 записи. Что я делаю не так?

1 Ответ

2 голосов
/ 07 января 2020

У вас есть лишнее 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;

Я не уверен, почему вы используете для этого временную таблицу. Но я предполагаю, что это часть более сложной логики c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...