#sql-server #stored-procedures #sql-function
Вопрос:
Мой пример кода выглядит так:
DECLARE @JsonText varchar(MAX) = '{ "Test": "" }' DECLARE @Name varchar(MAX) = JSON_VALUE(@JsonText, '$.Test') ; IF (@Name IS NULL) BEGIN SELECT 'Null' AS Result END ELSE BEGIN SELECT 'Empty' AS Result END
и у меня есть выход:
Result ---------- Empty
Мой ожидаемый результат равен нулю, я попробовал с помощью trim, а затем проверил, что строка пуста, а затем вернул значение null, работает нормально.
IF (@Result = '') SET @Result = NULL;
Но я ищу любую другую альтернативу, если она доступна, которая возвращает значение null вместо пустого.
Комментарии:
1. Если вы хотите , чтобы значение было
NULL
, затем определите значение, какNull
в вашем JSON.Null
и""
не имеют одинаковой ценности, точно так же, какNULL
и''
не являются.2. Можете ли вы объяснить, почему вам нужен NULL? NULL означает неизвестное , но это не неизвестно — это и пустая строка.
Ответ №1:
Строка нулевой длины (в JSON ""
и в T-SQL ''
) и NULL
не имеют одного и того же значения. В вашем JSON у вас есть строка нулевой длины. Если вы хотите NULL
, чтобы значение возвращалось из вашего JSON, определите значение, как Null
в вашем JSON:
DECLARE @JsonText nvarchar(MAX) = N'{ "Test": null }'; DECLARE @Name nvarchar(MAX) = JSON_VALUE(@JsonText, '$.Test'); IF (@Name IS NULL) BEGIN SELECT 'Null' AS Result; END ELSE BEGIN SELECT 'Empty' AS Result; END;
Это возвращает varchar
значение 'Null'
.
В качестве альтернативы вы можете использовать NULLIF
для возврата NULL
, если ваше выражение возвращает строку нулевой длины, но я бы предположил, что на самом деле это JSON, который нуждается в исправлении:
SET @Name = NULLIF(JSON_VALUE(@JsonText, '$.Test'),N'');