2016-08-10 3 views
1

: SELECT a,b FROM foo такое же, как SELECT a,b FROM foo WHERE a=a and b=b?Являются ли эти запросы одинаковыми?

Я получаю разные результаты, когда я их запускаю.

В конечном счете, я пытаюсь установить параметры для моего доклада SSRS как:

SET @a Varchar (20) DECLEARE @a = Null SET @b Varchar (20) DECLEARE @b = Null SELECT a,b FROM foo WHERE a=isnull(@a,a) and b=isnull(@b,b)

ответ

1

Вы получите разные результаты, потому что есть NULL где-то в A или B. NULL не равен NULL в SQL Server

Используйте это вместо этого.

SELECT a, b FROM foo 
WHERE (@a ISNULL or a [email protected]) AND (@b ISNULL or [email protected]) 

Также необходимо ОБРАТИТЬ ваши переменные перед их установкой.

+1

Знаете ли вы о работе? –

+0

@ H.Ben Я добавил, как обрабатывать нулевые параметры – scsimon

0

Оба этих запроса не возвращают одинаковый набор результатов на основе значения NULL в a или b.

Просто потому, что NULL не равен NULL.

+0

Это не всегда (всегда). ОП заявил, что получил разные результаты. – scsimon

+0

Ваш ответ правильный. Я не заметил, что значение null не равно нулю. – Ripon

+1

Хорошо помнить о SQL Server. Это важно в COUNT (*) по сравнению с COUNT ([столбец]) – scsimon

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