2010-02-25 2 views
2

Я хочу (свободно) есть хранимая процедура, какИспользование параметров в хранимых процедурах, где столбец может быть пустым

выберите * из таблицы, где col1 как @var

значение по умолчанию @var является ' % ', поэтому, если у меня нет значения для @var, он должен возвращать каждую строку. Однако проблема заключается в том, что он не возвращает строки, где col1 равно null.

Как вернуть все строки, если @var = '%' и строки, подобные @var, если у него есть значение?

[фактическая зр значительно сложнее, так что я не хочу, чтобы просто обернуть его в if..then и два выбирает]

ответ

3
select * from table where isnull(col1, '') like @var 

Если сделать трюк.

+0

Предполагая, что вы используете T-SQL. :-) – roufamatic

+0

Круто. Кажется, это работает хорошо. Это делает его всего лишь час или около того, потраченный впустую с CASE и/или COALESCE и т. Д. Cheers! – Apemantus

0

Вы могли бы особый случай, когда @var является «%», чтобы включить все нулевые значения, как это:

select * from table where col like @var or (@var = '%' and col is null) 
1

Всего голов вверх больше всего. Если этот SP будет использоваться часто, и данные, которые вы выбираете, являются большими, убедитесь, что вы тестируете свой запрос (используя любое из вышеперечисленных решений). Из прошлого опыта, использующего LIKE и ISNULL или IS NULL вместе, может иметь большой успех.