日期:2014-05-19  浏览次数:20521 次

存储过程 参数问题
我想用一个带参数的存储过程执行一系列查询,但这些参数是不固定的,也就是说有些参数在没有提供的情况下是查询所有,而给出的参数必须按要求查,不知道大家明白我的意思没?这种情况怎么实现?

------解决方案--------------------
可以傳入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(高升)正解,应当没有更多可以偷懒的办法了,用默认值是最简便的方法,写起来也没那么复杂,只不过是在定义的时候多写个等号而已