存储过程 if 判断如何写
where 后面 如果有一个参数,非空,则添加上,怎么写的?
delete from SIS_ZZ_JZJXJJFQRB jxj where jxj.xnd = v_xnd and (
jxj.xq = decode( v_xq,NULL,1,v_xq) or
jxj.xq = decode( v_xq,NULL,2 ,v_xq) or
jxj.xq = decode( v_xq,NULL,3 ,v_xq) or
jxj.xq = decode( v_xq,NULL,4 ,v_xq) or
jxj.xq = decode( v_xq,NULL,5 ,v_xq) or
jxj.xq = decode( v_xq,NULL,6 ,v_xq) );
我想要的是这样的效果,因为不想拼凑sql。 因为是在定义游标时,写的sql 所以拼凑语句比较复杂。
现在的语句意思是, 当 v_xq = null 时, 删除 jxj.xq in(1,2,3,4,5,6) 的值。
如果 v_xq = 1 时, 只删除1。
也可以换成 jxj.xq in(
decode( v_xq,NULL,1,v_xq) ,
decode( v_xq,NULL,2,v_xq),
decode( v_xq,NULL,3,v_xq) ,
decode( v_xq,NULL,4,v_xq),
decode( v_xq,NULL,6,v_xq)
)
declare @sql varchar(2000),@param varchar(50)
set @param = '参数值'
set @sql='select * from 表 where 1=1'
if len(@param)>0
set @sql = @sql + 'and 字段=‘’‘ + @param + ’‘’'
exec(@sql)
declare @sql varchar(2000);
if(@str!="")
begin
@sql = @sql + @str;
end
楼上正解,比较简单