Использование параметров в хранимых процедурах, где столбец может быть нулевым - PullRequest
2 голосов
/ 25 февраля 2010

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

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 25 февраля 2010
select * from table where isnull(col1, '') like @var

Должен сделать свое дело.

1 голос
/ 25 февраля 2010

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

0 голосов
/ 25 февраля 2010

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

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