使用存储过程中的列可能为null的参数

时间:2010-02-25 17:26:23

标签: sql stored-procedures null

我想(松散地)拥有像

这样的存储过程

从表格中选择*,其中col1类似@var

@var的默认值是'%',所以如果我没有@var的值,它应该返回每一行。但是,问题是它不会返回col1为null的行。

如果@var ='%',那么如果它确实有值,如何返回所有行?

[实际的sp明显更复杂,所以我不想将它包装在if..then并有两个选择]

3 个答案:

答案 0 :(得分:3)

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

应该做的伎俩。

答案 1 :(得分:1)

比任何事情都要好。如果要经常使用此SP并且您选择的数据很大,请确保您对查询进行性能测试(使用上述任一解决方案)。从过去使用LIKE和ISNULL或IS NULL的经验可以获得很大的性能影响

答案 2 :(得分:0)

@var为'%'时,您可能会遇到包含所有空值的特殊情况:

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