Динамический оператор WHERE - SQL Server 2005 - PullRequest
1 голос
/ 21 апреля 2009

Мне нужно создать оператор SQL, который использует ключевое слово LIKE для фильтрации набора результатов. Иногда это значение равно NULL.

Каков наилучший способ реализации в T-SQL? Я использую SQL Server 2005

Ответы [ 4 ]

4 голосов
/ 21 апреля 2009

Зависит от того, что вы подразумеваете под «не указано». Если это означает NULL, вы всегда можете попробовать

(
    Table.Column LIKE @myParameter
OR
    @myParameter IS NULL
)

Я также обнаружил, что иногда это работает быстрее.

ISNULL(Table.Column, @myParameter) = @myParameter

В качестве альтернативы, если вы динамически строите TSql из кода, просто пропустите эту часть предложения WHERE, если у вас нет параметра, или заполните @myParameter значением «%».

1 голос
/ 21 апреля 2009

Используйте объединение!

COALESCE(filter, '%')

Редактировать: Вероятно, это неправильный способ сделать это, но я думаю, что это вариант.

0 голосов
/ 21 апреля 2009

Лично, это такая ситуация, когда я строю инструкцию SQL в коде VB / C # и просто не объединяю предложение LIKE в конце, если у меня его нет.

Немного более причудливая версия того, что я только что сказал, состоит в том, чтобы иметь две версии подготовленного оператора, один с предложением LIKE, а другой - без него, и при необходимости вызывать соответствующий вариант.

0 голосов
/ 21 апреля 2009
 SELECT 
 lalala
 WHERE 1=1
 and (
  value like '%'+@search+'%'
  or @search = ''
 )

Хотя я не уверен, как это будет работать ...

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