Я столкнулся с несколько странным поведением с преобразованиями типа данных при использовании ISNULL. Посмотрите на это:ISNULL и неявные преобразования типов данных в TSQL
PRINT CASE WHEN ISNULL('', 0) = 0 THEN 'true' ELSE 'false' END
PRINT CASE WHEN ISNULL('', 0) = '' THEN 'true' ELSE 'false' END
PRINT CASE WHEN ISNULL(NULL, 0) = '' THEN 'true' ELSE 'false' END
Все эти выражения оцениваются как истинные. Но когда я объявляю переменную NVARCHAR и установите его в NULL, то происходит следующее:
DECLARE @charType nvarchar; SET @charType = NULL;
PRINT CASE WHEN ISNULL(@charType, 0) = '' THEN 'true' ELSE 'false' END
Это должно также оценить, правда, но это имеет значение ложь. Зачем?
Красиво объяснено. Пальцы вверх! – shadow
Я не нашел объяснения поведения преобразования ISNULL, и это, конечно же, объяснение - ноль, так как значение замены преобразуется в «0». Это ответили на вопрос. Спасибо, Правен. –
Что заставило меня опубликовать этот вопрос, так это то, что общее правило о приоритете типа данных не выполняется между выражением проверки и значением замены в выражениях ISNULL. Я ошибался в этом. На самом деле тип выражения проверки всегда имеет приоритет (что сейчас ясно для меня). –