在存储过程过程中,如果要实现Select查询的where子句动态查询,可以用
exec ( "select .... where"
+@whereStr)
这样的方式。但这样的话,感觉用存储过程就没什么用了,因为存储过程最大的特点就是将代码编译了放在DBMS中,而调用exec的话,这一部分就无法编译,也就无从优化了。
下面是一个比较巧妙的方法去实现所谓的“动态查询”
select * from table1 where
a = 1
and ( (@id is not null) or (
id=@id) )
@id是传入的参数,如果◎id的值是null的话,那么and后面一整块是false,可以忽略,而如果不为null的话,实际上等于
where a=1 and
id=@id
so...如果要启用id作为查询条件,就传入一个非null的值,否则就是不启用id作为查询条件,这就是传说中的动态查询