При использовании CASE внутри предложения WHERE без ELSE, что подразумевается под NULL? - PullRequest
0 голосов
/ 10 апреля 2019
declare @Name varchar(45)

SELECT
     *
FROM
     table law
WHERE
     --law.emp = case when isnumeric(@Name) = 1 then @Name else null end
     law.emp = case when isnumeric(@Name) = 1 then @Name end

     or coalesce(law.lname + ', ' + law.fname, '') like '%' + @Name + '%'

Мой вопрос заключается в том, чтобы сосредоточиться на операторе CASE, когда он вычисляет что-то отличное от числового значения ...

Если @Name - это что-то отличное от числового значения, чтодействительно происходит?law.emp = null ???Если это так, то в любом случае он не должен возвращать никаких результатов, потому что правильный синтаксис выглядит примерно так: where law.emp is null, верно?

Итак, просто для пояснения, мой столбец emp фактически не содержит нулей.

Я просто пытаюсь выяснить, что действительно происходит с моим утверждением WHERE, когда @Name оценивает что-то не числовое ...

Какая фактическая оценка выполняется?SQL игнорирует условие?

Это то, что я хочу: чтобы SQL не что-либо делал с law.emp, если @Name не является числовым.(У меня есть другие условия, которые будут использовать переменную @Name, если это текст.)

1 Ответ

1 голос
/ 10 апреля 2019

Выражение:

law.emp = NULL

всегда возвращает NULL.В предложении where это рассматривается как ложное, и строка не включается в набор результатов.

Я очень предпочитаю явное преобразование:

law.emp = try_convert(int, @Name)

Или к какому-либо типуemp есть.

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