2009-04-20 4 views
1

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

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

ответ

1

Используйте coalesce!

COALESCE(filter, '%') 

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

4

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

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

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

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

В качестве альтернативы, если вы динамически строить Tsql из кода, просто ommit той части ИНЕКЕ, если у вас нет параметра или заполнить @myParameter с «%».

0
SELECT 
lalala 
WHERE 1=1 
and (
    value like '%'[email protected]+'%' 
    or @search = '' 
) 

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

+0

Если у вас есть% любой из сторон, он будет соответствовать всем, если @search «все равно». В этом случае вам нужно только OR, если вы делаете точное совпадение. –

0

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

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