--参考
use northwind
go
declare @number integer
set @number=4
exec('select top '+@number +'* from orders order by orderid')

解决方案 »

  1.   

    使用动态语句create procedure proc_goodstudent( @number int )
    as
    begin
      Exec('select top '+ @number + '* from student order by score')
    end
      

  2.   

    谢谢,我之前也试过这个方法可行,但是觉得这样很麻烦,这样又退回到在程序里拼接SQL语句那个状态了。有没有更好的方法?
      

  3.   

    create procedure proc_goodstudent( @number int )
    as
    begin
      exec('select top '+@number+' * from student order by score')
    end
      

  4.   

    create procedure proc_goodstudent( @number int )
    as
    begin
      set rowcount @number
      select * from student order by score
    end
      

  5.   

    Yukon 中的 T-SQL TOP 选项有两处显著的功能增强。现在您可以将一个表达式指定为 TOP 的参数,表达式可以包含变量甚至是独立的查询。您还可以通过改进型 DML (INSERT, UPDATE, DELETE) 使用 TOP 选项。    为了指定一个表达式,必须将它用括号括起来。当不使用 PERCENT 选项时,表达式应该是 BIGINT 数据类型的;当使用 PERCENT 选项时,应该是范围从 0 到 100 的一个浮点值。以下代码说明了如何使用带有一个变量的表达式,以按所请求数量返回 AdventureWorks 数据库中 SalesOrderHeader 的最早定单:USE AdventureWorks
    DECLARE @n AS BIGINT
    SET @n = 5
    SELECT TOP (@n) *
        FROM SalesOrderHeader AS SOH
        ORDER BY OrderDate, SalesOrderID    SalesOrderID 用作附加键。类似的,以下示例说明了如何使用 PERCENT 选项按所请求百分比返回最早定单:DECLARE @p AS FLOAT
    SET @p = 0.01
    SELECT TOP (@p) PERCENT *
        FROM SalesOrderHeader AS SOH
        ORDER BY OrderDate, SalesOrderID---shit!难到我要等到Yukon出来?有谁可以告诉我 set rowcount N
    select ....
    set rowcount 0是否等价于 select top N ... ?
      

  6.   

    http://www.aspfaq.com/show.asp?id=2521http://www.microsoft.com/china/sql/using/tips/development/May21.asp
    我觉得set rowcount 不好之处是影响了子查询的行数,所以在用到rowcount时,一定不能嵌套子查询,除非rowcount设得足够大。