代码之家  ›  专栏  ›  技术社区  ›  Eddie Groves

在SQL Server中动态选择TOP@var

  •  269
  • Eddie Groves  · 技术社区  · 16 年前

    如何使用动态变量设置SQL Server中要返回的行数?以下语法在SQL Server 2005+中无效:

    DECLARE @count int
    SET @count = 20
    
    SELECT TOP @count * FROM SomeTable
    
    6 回复  |  直到 16 年前
        1
  •  621
  •   Brian Kim    16 年前
    SELECT TOP (@count) * FROM SomeTable
    

    这仅适用于SQL 2005+

        2
  •  43
  •   x0n    16 年前

    语法“select top(@var)…”仅适用于SQL SERVER 2005+。对于SQL 2000,您可以执行以下操作:

    set rowcount @top
    
    select * from sometable
    
    set rowcount 0 
    

    希望这有帮助

        3
  •  13
  •   Codewerks    16 年前

    在x0n的示例中,它应该是:

    SET ROWCOUNT @top
    
    SELECT * from sometable
    
    SET ROWCOUNT 0
    

    http://msdn.microsoft.com/en-us/library/ms188774.aspx

        4
  •  6
  •   Evaldas Buinauskas    9 年前

    或者把变量放在括号里

    DECLARE @top INT = 10;
    
    SELECT TOP (@Top) *
    FROM <table_name>;
    
        5
  •  6
  •   David Castro    6 年前
    declare @rows int = 10
    
    select top (@rows) *
    from Employees
    order by 1 desc -- optional to get the last records using the first column of the table
    
        6
  •  4
  •   Jan    16 年前

    还可以使用动态SQL并使用exec命令执行:

    declare @sql  nvarchar(200), @count int
    set @count = 10
    set @sql = N'select top ' + cast(@count as nvarchar(4)) + ' * from table'
    exec (@sql)