2015-11-18 3 views
3

Я строю хранимую процедуру, которая использует параметр бит. Этот параметр бит используется для фильтрации столбца электронной почты.Использование типа данных BIT для фильтрации запроса в предложении WHERE

if @param is 1 - показать всех клиентов, у которых есть письмо.

if @param is 0 - показать всех клиентов без электронной почты.

и если @param является нулевым (не передается процедуре) - показывать как клиентов с электронной почтой, так и без нее.

это не так хорошо. любое предложение?

where case @email when 1 then email is not null 
       when 0 then email is null) 
+0

Предложение от lad2025, вероятно, как я пошел бы. Стоит отметить, что это приводит к появлению «уловить все» типа запросов, которые могут иметь серьезные проблемы с производительностью. Вы можете заглянуть в эту статью для некоторых способов борьбы с этими проблемами. http://sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries/ –

+0

Обратите внимание, что сначала вы используете '@ param', а затем используете' @ email' в своем примере кода. Попробуйте использовать хорошие имена переменных, например '@ HasEmail'. –

+0

Спасибо, Sean! Я взгляну на статью –

ответ

5

Используйте простой OR:

WHERE (@param IS NULL) 
    OR (@param = 1 AND email IS NOT NULL) 
    OR (@param = 0 AND email IS NULL) 
+1

Спасибо! это сделал трюк! –

Смежные вопросы