在使用select top n from ***,的时候,有点疑问,当这个n是表达式或局部变量时,总是抱错,比如
-----------------------------------------------------------------------------------------
declare @i int
set @i = 0 
select @i = count(*) from master..sysdatabases
set @i = @i - 9 + 1
print @i
select top @i * from master..sysdatabases order by dbid desc
-----------------------------------------------------------------------------------------
服务器: 消息 170,级别 15,状态 1,行 6
第 6 行: '@i' 附近有语法错误。
   请教这个问题的解决方法

解决方案 »

  1.   

    如果你用的是sql 2005select top (@i) * from master..sysdatabases order by dbid desc
      

  2.   

    -- 如果你用的是sql 2000及以下版本declare @i int
    set @i = 0 
    select @i = count(*) from master..sysdatabases
    set @i = @i - 9 + 1
    print @i
    exec('select top '+@i+' * from master..sysdatabases order by dbid desc')
      

  3.   

    declare @i int
    declare @s nvarchar(1000)
    set @i = 0 
    select @s='select @i = count(*) from master..sysdatabases'
    exec sp_executesql @s,N'@i int output',@i output
    set @i = @i - 9 + 1
    print @i
    exec('select top '+@i+' * from master..sysdatabases order by dbid desc')
      

  4.   

    2005 还可以
    select top ((select count(*) from master..sysdatabases) - 9 + 1) * 
    from master..sysdatabases order by dbid desc
      

  5.   

    use master
    declare @i int
    set @i = 0 
    select @i = count(*) from master..sysdatabases
    set @i = @i - 9 + 1
    print @i
    select * from master..sysdatabases order by dbid desc
    --需要使用动态SQL语句方式,编辑字符串连接为一整条SELECT,变量好像要单独分折后连接
    exec('select top '+@i+' * from master..sysdatabases order by dbid desc')
      

  6.   

    邹建回的贴,我frank真是受宠若惊,动态执行,我怎么没有想到??
    崇拜邹建!小弟:frank ^-^