存储过程 参数问题
我想用一个带参数的存储过程执行一系列查询,但这些参数是不固定的,也就是说有些参数在没有提供的情况下是查询所有,而给出的参数必须按要求查,不知道大家明白我的意思没?这种情况怎么实现?
------解决方案--------------------可以傳入null值
然後在存儲過程中判斷參數是否為null再作相應處理
不過如果參數較多的話需要判斷的情況也會比較多
------解决方案--------------------这样?
@a int=null,@b varchar(2)=null
select * from t where a=isnull(@a,a) and b=isnull(@b,b)
------解决方案--------------------存储过程中的参数是可以有默认值的
如果我要写一个查询员工编号的存储过程
create procedure QueryEmpno
@empno varchar(10) ' ' --默认值 ' '
as
if (@empno = ' ')
select * from HumanResources.Employee
else
select * from HumanResources.Employee where EmployeeID = @empno
end
--LZ要的是不是这样的情况,当我传了参数
exec QueryEmpno '25 '
--没参数查询所有的
exec QueryEmpno
------解决方案--------------------select * from t where a=isnull(@a,a) and b=isnull(@b,b)
當@a為null值時,那麼isnull(@a, a)的返回值為a,此時條件變成了a=a
當@a不為null值時,isnull(@a, a)返回值為@a,此時條件變成了a=@a
@b同理
所以當@a和@b同時為null時,條件就是a=a and b=b,這時得到的結果集與select * from t是完全一樣的
當@a為null,@b不為null時,條件就是a=a and b=@b,此時結果集與select * from t where b=@b完全一樣
其他情況同理
這樣解釋應該能懂了吧
------解决方案--------------------hb_gx(高升)正解,应当没有更多可以偷懒的办法了,用默认值是最简便的方法,写起来也没那么复杂,只不过是在定义的时候多写个等号而已