2010-09-14 7 views
9

У меня есть SQL-запрос, который параметризуется очень ограниченной внутренней структурой. Запрос выглядит так:SQL-запрос с нулевым параметром

Select * from somewhere 
where name IN (:parameter); 

Код вводит ноль ко многим строкам в местоположение, указанное параметром:. Флаг «: параметр» может использоваться только в предложении «IN» (поэтому он не может быть перемещен после предложения where, чтобы условно вставить раздел «имя IN»).

Иногда пользователь установит параметр:

«собака», «кошка»

Другие времена, пользователь не будет ставить какие-либо значения в переменной: параметр. Это вызывает проблемы, так как в результате запроса SQL будет:

Select * from somewhere 
where name IN(); 

Мой код может поймать тот случай, когда параметр пуст, но мне нужно что-то, что я могу привнести в заявление, в котором гарантировано НИКОГДА не соответствуют фактическим строка.

Есть ли какое-либо регулярное выражение SQL, которое я мог бы вставить, которое НИКОГДА не соответствовало бы какой-либо строке? Что-то вроде%.% Или что-то еще ....

Спасибо!

+0

Возможно, это потребует дальнейшей мысли. Предполагая, что запрос является вашим фактическим запросом, вы в основном выбираете каждую запись и каждый столбец в таблице (предположительно большой, если требуется таблица предложений IN), что может оказаться не лучшей стратегией. –

+0

глядя на него с другого направления, почему бы не запретить пользователю отправлять страницу, если это поле пуст? –

+0

@Robert - на самом деле есть другие части запроса; Я упростил его для целей stackoverflow; однако другие части не устраняют проблему с параметром имени – David

ответ

16

Вы можете сказать:

where name in (null) 

Это никогда не совпадают, так как ничто не равно null

+1

Хороший ответ, но почему' null' не соответствует 'null' ? – fastcodejava

+2

@fastcodejava: «сравнение с Null никогда не может привести к True или False, но всегда в третьем логическом результате, Unknown» http://en.wikipedia.org/wiki/Null_(SQL). Результаты «null = null» в 'unknown', а предложение' where' соответствует только 'true'. – Andomar

+0

экстракт (дни от ts.triggered_at) IN (null) Не работает для меня в postgresql –

0

Я не думаю, что вы можете гарантировать, что никогда не будете соответствовать существующей строке. Лучшее, что вы могли бы сделать, это обработать случай, когда инструкция не работает в базе данных; однако, не зная, как выполняется сценарий, я не могу больше узнать оттуда.

4

null не должен совпадать ни с чем (даже не null сам.).

0

Имя не может быть пустым, так что вы можете сделать пустую строку?

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