就是普通的select top n *,我想取前几条能用变量自己设定,但是select top @Total * 貌似不能用,不知道该改成什么样的,求指导。谢谢!CREATE PROCEDURE Getlist
@Classid int,
@Total intAS
if(@Total>=6)  
select top 6 * from tb_article where Classid = @Classid
else  
begin
select top @Total * from tb_article where Classid = @Classid
union all
select top (6 - @Total) * from tb_article where Classid = @Classid 
end

解决方案 »

  1.   

    CREATE PROCEDURE Getlist
    @Classid int,
    @Total intAS
    if(@Total>=6)  
    select top 6 * from tb_article where Classid = @Classid
    else  
    begin
    select top (@Total) * from tb_article where Classid = @Classid
    union all
    select top (6 - @Total) * from tb_article where Classid = @Classid 
    end
      

  2.   

    加个 () 如  select top (@Total) * from tb_article where Classid = @Classid
      

  3.   

    CREATE PROCEDURE Getlist
    @Classid int,
    @Total intAS
    if(@Total>=6)  
    select top 6 * from tb_article where Classid = @Classid
    else  
    begin
    declare @sql nvarchar(4000)
    set @sql='select top '+ltrim(@Total)+' * from tb_article where Classid = '+ltrim(@Classid)+' 
    union all
    select top '+ltrim(6 - @Total)+' * from tb_article where Classid = '+ltrim(@Classid))
    exec(@sql) 
    endSQL2K
      

  4.   

    top(@Total) 05及以上版本可以。如果是2000,需要拼接SQL的动态语句去执行。
      

  5.   

    select top (@Total) * from tb_article where Classid = @Classid
      

  6.   


    CREATE PROCEDURE Getlist
    @Classid int,
    @Total int
    as
    begin
     declare @sql varchar(6000)
     if(@Total>=6)
     begin
       select @sql='select top 6 * from tb_article where Classid='+cast(@Classid as varchar)
     end 
     else
     begin
       select @sql='select top '+cast(@Total as varchar)+' * from tb_article where Classid='+cast(@Classid as varchar)
                   +' union all '
                   +' select top '+cast(6-@Total as varchar)+' * from tb_article where Classid ='+cast(@Classid as varchar)
     end
      
     exec(@sql)
    end
      

  7.   

    我在 union all 前面的select语句加了 order by xxx 会报错。但是从功能上来说 order by又必须加。再次请求帮助
      

  8.   

    再嵌套一次 ,里面可以用top +order by
      

  9.   


    CREATE PROCEDURE Getlist
    @Classid int,
    @Total int
    as
    begin
     declare @sql varchar(6000)
     if(@Total>=6)
     begin
       select @sql='select top 6 * from tb_article where Classid='+cast(@Classid as varchar)
     end 
     else
     begin
       select @sql='select * from (select top '+cast(@Total as varchar)+' * from tb_article where Classid='+cast(@Classid as varchar)
                   +' union all '
                   +' select top '+cast(6-@Total as varchar)+' * from tb_article where Classid ='+cast(@Classid as varchar)+') t '
                   +' order by [排序的字段名] '
     end
      
     exec(@sql)
    end
      

  10.   

    第一个@Total 地方加()
    select top (@Total) * from tb_article where Classid = @Classid
    union all
    select top (6 - @Total) * from tb_article where Classid = @Classid