如何动态生成wehre 语句(50分)

  • 主题发起人 主题发起人 shicj
  • 开始时间 开始时间
S

shicj

Unregistered / Unconfirmed
GUEST, unregistred user!
我在写一个存储过程,总共要传进去5个参数作为where语句的判断条件,
但5个参数中可能有?个为空,如果用类似where column_name=@declarename 判断的话,
当@declarename=null时,则where 判定出来必定为假,一条记录都不会显示,
我想过用动态生成where语句的方法,把那些为空的判断条件从where语句中去掉,
但不知如何着手。有哪位知道吗?
 
nullif()
isnull()
 
我知道用nullif()判断是否为空,但判断出后如何生成where 语句呢?
 
以一个参数@p1举例:
DECLARE @p1 varchar(100)
select @p1=null /* 先执行一次,再改成其他如select @p1='abc'试试 */
select * from yourtable where field=isnull(@p1,field); /*注意最后一个字段名field不在''中 */
go

 
CREATE PROCEDURE P_test --test.sql
@strA varchar(50),
@strB varchar(50),
@strC varchar(50),
@strD varchar(50),
@strE varchar(50)
as

declare @strSQL varchar(1000)

if (@strA is null) and (@strB is null) and (@strC is null)
and (@strD is null) and (@strE is null)
set @strSQL = 'select * from table1'
else
set @strSQL = 'select * from table1 where'

if @strA is not null
if right(@strSQL,5)<>'where'
set @strSQL = @strSQL + ' field1 = "' + @strA + '"'
else
set @strSQL = @strSQL + ' and field1 = "' + @strA + '"'

if @strB is not null
......
 
我同意zwhc
 
TO ZWHC
@strsql怎样运行?
 
我插一句
用EXEC(@strsql)
 
我一般是这样作:
select * from table1 where 1=1
if @strA is not null
and YourField=@strA
...
 
多人接受答案了。
 
后退
顶部