你的位置:首页 > 数据库

[数据库]sqlserver 2008存储过程 多个可空条件任意组合

很多程序员在实际开发中,经常遇到这种情况,列表上方有很多条件,包含下拉框,输入框等等,这些条件都可以不输入,如果我们需要写一个存储过程,很多条件挨个判断是否为空,且进行任意组合,任何一个开发人员都会疯的。闲话少说,接下来举例说明:

create proc myproc 

@condition1 varchar(50)=null,

@condition2 int=null,

@condition3 bit

as

select col1,col2 from table

where col3=isnull(@condition1,col3)

and col4=isnull(@condition2,col4)

and col5=isnull(@condition3,col5)

以上代码中用到的ISNULL函数是sqlserver的内置函数,如果第一个参数为null,就会返回后面的值,如果where 后有col3=col3这样的东西,可能会影响一些效率,但是毕竟解决问题了。美中不足的是,这个内置函数只在2008(含)以上版本里有,用2005的,赶紧升级吧。

也有人在存储过程里拼接sql 字符串,然后使用exec来执行字符串,存储过程的优势就是其已经通过编译了,速度比较快,一旦用exec来执行字符串,仍旧会比较慢,因为数据库要先编译你的字符串。

以上是个人浅见,欢迎拍砖。