Какой эффективный способ проверить нулевое значение или значение для столбца в запросе SQL. Рассмотрим таблицу SQL table
с целочисленным столбцом column
, который имеет индекс. @value
может быть целым или нулевым, например: 16 или нулевым.
Запрос 1: Не уверен, но, похоже, не следует полагаться на короткое замыкание в SQL. Однако приведенный ниже запрос всегда работает правильно, когда @value
является некоторым целым числом или нулем.
select * from
table
where (@value is null or column = @value)
Приведенный ниже запрос является расширенной версией вышеуказанного запроса. Это тоже работает правильно.
select * from
table
where ((@value is null)
or (@value is not null and column = @value))
Могут ли вышеуказанные 2 запроса воспользоваться преимуществом индекса?
Запрос 2: Приведенный ниже запрос сравнивает столбец с ненулевым @value
, иначе сравнивает столбец column
с самим собой, который всегда будет истинным, и возвращает все. Это тоже работает правильно. Будет ли этот запрос использовать индекс?
select * from
table
where (column = isnull(@value, column))
Какой самый лучший способ?
Примечание. Если ответ зависит от базы данных, меня интересует MS-SQL.