2014-02-07 1 views
2

У меня есть хранимая процедура с параметром, который может иметь значение NULL или не-NULL. Мне нужно сравнить этот параметр в предложении WHERE. Если параметр не равен NULL,Одиночный запрос SQL для решения NULL и значений, отличных от NULL

where ... 
and parameter = non-NULL-value 

будет работать.

Но когда параметр будет нулевым, он не будет ANSI-совместимый:

where ... 
and parameter = NULL 

Я не хочу, чтобы написать два отдельных запросов. Как обеспечить соответствие ANSI в одном запросе?

+0

что вы хотите получить в результате, когда параметр 'NULL'? – Lamak

+1

Ваш второй запрос является ANSI-совместимым. Предложение 'where' всегда возвращает false. –

+0

какой тип столбца? – Jodrell

ответ

4

Предполагая, что значение передается в запросе в качестве параметра @value, вы можете сделать это следующим образом:

SELECT * 
FROM MyTable 
WHERE (@value IS NOT NULL AND parameter = @value) -- Or simply parameter = @value 
    OR (@value IS NULL AND parameter IS NULL) 
+0

Это делается. Спасибо. – aliensurfer