我想(松散地)拥有像
这样的存储过程从表格中选择*,其中col1类似@var
@var的默认值是'%',所以如果我没有@var的值,它应该返回每一行。但是,问题是它不会返回col1为null的行。
如果@var ='%',那么如果它确实有值,如何返回所有行?
[实际的sp明显更复杂,所以我不想将它包装在if..then并有两个选择]
答案 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)