SQL分页数据查询

在许多数据库应用系统中,会对数据进行大量的查询操作。当查询数据量比较大时查询所用的时间就会变得较慢,所以我们希望可以分批的获取数据。

特写了一个存储过程用于分批获取数据。鉴于游标效率低,故此处没有采用。

Create Procedure SelectPage @TableName nvarchar ( 64 ), @KeyField nvarchar ( 64 ), @Fields nvarchar ( 512 ), @PageIndex int , @PageSize int = 15
As
Declare @sql nvarchar ( 512 )
if @PageIndex = 1 begin
Set @sql = ' Selecttop ' + convert ( nvarchar ( 8 ), @PageSize ) + ' ' + @Fields + ' From ' + @TableName
end
else begin
Set @sql = ' selecttop ' + convert ( nvarchar ( 8 ), @PageSize ) + ' ' + @Fields + ' From ' + @TableName
Set @sql = @sql + ' Where ' + @KeyField + ' >(selectmax( ' + @KeyField + ' )From(SelectTop '
Set @sql = @sql + convert ( nvarchar ( 8 ), @PageSize * ( @PageIndex - 1 )) + ' *from ' + @TableName + ' Orderby ' + @KeyField + ' )T) '
end

-- Print@sql
exec sp_executesql @sql

参数说明:

@TableName:要查询的数据表名称

@KeyField:数据表主键字段

@Fields:要查询的字段名列表,使用逗号分隔,最后一个字段名后不需要逗号

@PageIndex:要查询的页面索引

@PageSize:每页数据笔数,默认为15,即每页15笔数据

版权声明:本文为博主原创文章,未经博主允许不得转载。

你可能感兴趣的:(sql,server)