前面跟一个参数过来,用户选择的@orderby int
假设orderby的值为1,执行order by price1 desc
orderby值为2时,执行order by price1 asc
orderby 值为空时,即用户不选择条件排序,那么order by id descCREATE procedure ProList
@myname varchar(100),
@orderby int
as
select id,myname,price from [pro] 
where online=1
and myname like '%'+@myname+'%'这儿排序怎么写GO

解决方案 »

  1.   


    CREATE procedure ProList 
    @orderby int 
    as 
    begin
    select top 10 id,type,subject from [table1]   order by   case @orderby when 1 then  id  when  2  then  type   end desc
    end
      

  2.   

    我不是根据不同的字段排序,是两种情况都有,当orderby不为空时,根据同一字段price升序或降序,当orderby为空时,根据另一字段id desc
      

  3.   


    CREATE procedure ProList 
    @orderby int 
    as 
    begin
    select top 10 id,type,subject from [table1]   order by   case @orderby when 1 then  id  when  2  then  type   end desc
    end
      

  4.   

    CREATE procedure ProList 
    @myname varchar(100), 
    @orderby int 
    as 
    select id,myname,price from [pro] 
    where online=1 
    and myname like '%'+@myname+'%' --这儿排序怎么写  
    order by case when @orderby is null then id else price1 end descGO
      

  5.   

    还有一种情况,price1升序怎么排呢?一共有三种.
    orderby的值为1,执行order by price1 desc 
    orderby值为2时,执行order by price1 asc 
    orderby 值为空时,即用户不选择条件排序,那么order by id desc
      

  6.   

    CREATE procedure ProList 
          @myname varchar(100), 
          @orderby int 
    as 
        declare @s varchar(5000)
        set @s='select id,myname,price from [pro] where online=1 and myname like '''+ '%'+@myname+'%''' 
        if @orderby=1
            exec(@s+'  order by price1 desc')
        else if @orderby=2
            exec(@s+ ' order by price1 asc')
        else 
            exec (@s+'order by id desc') 
     
        
      

  7.   

    CREATE procedure ProList 
          @myname varchar(100), 
          @orderby int 
    as 
    begin
        if @orderby=1
    select id,myname,price from [pro] 
    where online=1 
    and myname like '%'+@myname+'%' 
    order by price1 desc        
        else if @orderby=2
            select id,myname,price from [pro] 
    where online=1 
    and myname like '%'+@myname+'%' 
    order by price1 
        else
    select id,myname,price from [pro] 
    where online=1 
    and myname like '%'+@myname+'%' 
    order by id desc  
    end
    go
      

  8.   

    CREATE procedure ProList
    @bid varchar(20),
    @sid varchar(20),
    @myname varchar(100),
    @myitem varchar(100),
    @price_1 int,
    @price_2 int,
    @commend int,
    @orderby int
    as
    declare @s varchar(5000)
    set @s='select id,myname,img,price1,commend,online,hit,addtime,kucun from [pro] 
    where online=1
    and ('','')+bid like '+'%,'+@bid+'%''
    and ('','')+sid like '+'%,'+@sid+'%''
    and myname like '+'%'+@myname+'%''
    and myitem like '+'%'+@myitem+'%''
    and price1>=(case @price_1 when 0 then price1 else @price_1 end)
    and price2<=(case @price_2 when 0 then price2 else @price_2 end)
    and commend=@commend'
    if @orderby=1
            exec(@s+'  order by price1 desc')
        else if @orderby=2
            exec(@s+ ' order by price1 asc')
        else 
            exec (@s+'order by id desc') 这是我的全部代码。
    这样写后,提示:不允许对具有不止一条 SELECT 语句的远程存储过程或存储过程使用服务器游标。请使用默认结果集或客户端游标。我在分页那儿调用:set rs=cmd.execute 这行提示错误。
    dobear_0922,你那样写,我的代码是不是会很多?
      

  9.   

    CREATE procedure ProList
    @bid varchar(20),
    @sid varchar(20),
    @myname varchar(100),
    @myitem varchar(100),
    @price_1 int,
    @price_2 int,
    @commend int,
    @orderby int
    as
    select id,myname,img,price1,commend,online,hit,addtime,kucun from [pro] 
    where online=1
    and (',')+bid like '%,'+@bid+'%'
    and (',')+sid like '%,'+@sid+'%'
    and myname like '%'+@myname+'%'
    and myitem like '%'+@myitem+'%'
    and price1>=(case @price_1 when 0 then price1 else @price_1 end)
    and price2<=(case @price_2 when 0 then price2 else @price_2 end)
    and commend=@commend
    order by (case @orderby when 1 then price1 when 2 then id else addtime end) desc
    GO这样执行正确的,可是达不到我想要的效果,price asc.哎
      

  10.   

    把你的做成動態不可以嗎
    Print @S
    看看有沒有語法錯誤