这个语句
declare @a int
select @a=7
select *
from (select top '+rtrim(@a)+' * from gm_result order by kill_cnt desc) a
---------------------------------------------
出现
服务器: 消息 170,级别 15,状态 1,行 4
第 4 行: '+rtrim(@a)+' 附近有语法错误。
---------------------
怎么回事啊

解决方案 »

  1.   

    declare @a int
    select @a=7
    exec ('
    select *
    from (select top '+rtrim(@a)+' * from gm_result order by kill_cnt desc) a
    ')
      

  2.   

    declare @a int
    select @a=7declare @SQL varchar(8000)
    select @SQL='select * from (select top '+ rtrim(@a) + ' * from gm_result order by kill_cnt desc) a'
    exec (@SQL)
      

  3.   

    SQL SERVER 2000不支持 TOP + 变量
    只能用动态SQL 解决
    盖子看大家都有这个需求
    于是呼
    SQL SERVER 2005 支持这个功能了
      

  4.   

    Haiwer(海阔天空) ( ) 信誉:138 
    --------------------------------
    服务器: 消息 170,级别 15,状态 1,行 5
    第 5 行: 'rtrim' 附近有语法错误。
      

  5.   

    用动态语句
    EXEC(‘select *
    from (select select top '+@a+@FdOutPut+' from gm_result order by kill_cnt desc) a’)
      

  6.   

    呵呵,都没注意,int要转换一下。cast
    declare @a int
    select @a=7declare @SQL varchar(8000)
    select @SQL='select * from (select top '+ rtrim(cast(@a as char(2)) + ' * from gm_result order by kill_cnt desc) a'
    exec (@SQL)
      

  7.   

    :)
    to:
     lalakid(梦想总是那么美好……) ( ) 信誉:100  2006-08-02 17:13:00  得分: 0  
     
     
       SQL SERVER 2000不支持 TOP + 变量
    只能用动态SQL 解决
    盖子看大家都有这个需求
    于是呼
    SQL SERVER 2005 支持这个功能了
      
    haha懶惰 :)
      

  8.   

    declare @a int
    select @a=7
    Declare @s varchar(8000)
    Set @s = ''
    Set @s = 'select * ' + 
     ' from (select top  '+ rtrim(@a) +'  * from t order by articleId desc) a'Exec(@s)
    这样是可以的执行的
    我刚刚测试了一下
      

  9.   

    Or:declare @a int
    select @a=7
    Declare @s varchar(8000)
    Set @s = rtrim(@a)
    exec( 'select * ' + 
     ' from (select top  '+ @S +'  * from t order by articleId desc) a')