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

Я хочу (свободно) иметь хранимую процедуру, например

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

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

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

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


person Apemantus    schedule 25.02.2010    source источник


Ответы (3)


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

Должен сделать трюк.

person roufamatic    schedule 25.02.2010
comment
Предполагая, что вы используете T-SQL, т.е. :-) - person roufamatic; 25.02.2010
comment
Прохладный. Кажется, это работает хорошо. Таким образом, мы потратили всего час или около того на то, чтобы возиться с CASE и/или COALESCE и т. д. Ура! - person Apemantus; 25.02.2010

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

person CResults    schedule 25.02.2010

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

select * from table where col like @var or (@var = '%' and col is null)
person Adam Hughes    schedule 25.02.2010