SQL Server2005获取第N条记录两种方法

表结构如下,要求取出第2条记录:

Create TABLE Pet
(
    [Id] int identity(1,1) primary key,
    [Name] nvarchar(50)
)

方法一:SQL Server2000经典查询法(TOP)

Select TOP 1 [Name] FROM Pet Where [Id]=(Select max([Id]) FROM Pet Where [Id] in (Select TOP 2 [Id] FROM Pet orDER BY [Id]))

简化版:

Select TOP 1 [Name] FROM Pet Where [Id]=(Select max([Id]) FROM (Select TOP 2 [Id] FROM Pet orDER BY [Id]) as tab)

若N需动态指定,可用sp_executesql:

declare @sql nvarchar(200)
declare @Name nvarchar(50), @Number int
select @Number = 2, @sql = N'Select TOP 1 @Name=[Name] FROM Pet Where [Id]=(Select max([Id]) FROM (Select TOP ' + convert(nvarchar,@Number) + ' [Id] FROM Pet orDER BY [Id]) as tab)'
EXECUTE sp_executesql @sql, N'@Name nvarchar(50) output', @Name output
Select @Name

SQL Server2005增强型TOP(N)法:

Select TOP 1 [Name] FROM Pet Where [Id]=(Select max([Id]) FROM (Select TOP(@Number) [Id] FROM Pet orDER BY [Id]) as tab)

方法二:SQL Server2005新查询法(row_number() over())

Select [Name] FROM (Select (row_number() over(ORDER BY [Id])) as RowNumber,[Name] FROM Pet) as tab Where RowNumber=2


评论: 0 | 引用: 0 | 查看次数: 3371
发表评论
登录后再发表评论!