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

解决方案 »

  1.   

    可以傳入null值然後在存儲過程中判斷參數是否為null再作相應處理不過如果參數較多的話需要判斷的情況也會比較多
      

  2.   

    这样?
    @a int=null,@b varchar(2)=null
    select * from t where a=isnull(@a,a) and b=isnull(@b,b)
      

  3.   

    存储过程中的参数是可以有默认值的如果我要写一个查询员工编号的存储过程
    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
      

  4.   

    hb_gx(高升)所说的在参数很少的情况下可以,但是假如参数是5个呢,那不仅要把每一个参数缺省的条件都写一遍,而且还要加上几个缺省参数组合的情况,那太麻烦了。
    谁还有解决办法?
      

  5.   

    2樓 zsforever(虎虎) 的方法可以啊沒看明白嗎?
      

  6.   

    select * from t where a=isnull(@a,a) and b=isnull(@b,b)b=isnull(@b,b)这是什么意思?小弟刚学这个~~
      

  7.   

    @a int=null,@b varchar(2)=null
    select * from t where a=isnull(@a,a) and b=isnull(@b,b)
    ---------------------------------
    的确不明白,请解释下
      

  8.   

    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完全一樣其他情況同理這樣解釋應該能懂了吧
      

  9.   

    来晚了!!!
    2樓 zsforever(虎虎) 的方法
      

  10.   

    hb_gx(高升)正解,应当没有更多可以偷懒的办法了,用默认值是最简便的方法,写起来也没那么复杂,只不过是在定义的时候多写个等号而已
      

  11.   

    谢谢echiynn(寶琲)的讲解,非常感谢楼上几位!