转:SqlServer 数据分页的存储过程

    通常用普通的SQL语句查询数据,在数据量少的情况下速度上没什么感觉,一旦数居量很大之后,速度会明显变慢,因为大量的数据在网络中传输会花掉不少的时间,如果使用了分页查询数据,只反回有用的数据,把不需要的数据排除后,传输速度会快很多,如下是一个SQL分页的存储过程,本过程是以SQL自带的 Northwind 数据库为例写的,可以根据自已的需要随意更改

CREATE PROCEDURE [GetCustomersDataPage]
@PageIndex
INT, --页号
@PageSize
INT, --页数
@RecordCount
INT OUT, --记录数
@PageCount
INT OUT --页数
AS
SELECT @RecordCount = COUNT(*) FROM Customers
SET @PageCount = CEILING(@RecordCount * 1.0 / @PageSize)

DECLARE @SQLSTR NVARCHAR(1000)

IF @PageIndex = 0 OR @PageCount <= 1
SET @SQLSTR ='SELECT TOP '+STR( @PageSize )+' CustomerID, CompanyName,Address,Phone FROM Customers ORDER BY CustomerID DESC'

ELSE IF @PageIndex = @PageCount - 1
SET @SQLSTR =' SELECT * FROM ( SELECT TOP '+STR( @RecordCount - @PageSize * @PageIndex )+' CustomerID, CompanyName,Address,Phone FROM Customers ORDER BY CustomerID ASC ) TempTable ORDER BY CustomerID DESC'

ELSE
SET @SQLSTR =' SELECT TOP '+STR( @PageSize )+' * FROM ( SELECT TOP '+STR( @RecordCount - @PageSize * @PageIndex )+' CustomerID, CompanyName,Address,Phone FROM Customers ORDER BY CustomerID ASC ) TempTable ORDER BY CustomerID DESC'

EXEC (@SQLSTR)

GO

你可能感兴趣的:(sqlserver)