要分页我们必须要有数据库,所以我们先准备下数据库,其数据库脚步如下: --以下是创建数据库和数据库表以及向数据库插入数据 use master Go if exists(select * from sysdatabases where name='pagination') drop database pagination Go create database pagination Go use pagination Go create table userInfo ( [userID] int identity(1,1) primary key not null, [userName] nvarchar(50) not null, [userPassword] nvarchar(50) not null, ) Go insert userInfo values('xuyesheng','8888') insert userInfo values('jiaojiao','8888') insert userInfo values('administrator','888') insert userInfo values('xuyesheng1','123') insert userInfo values('xuyesheng2','123') insert userInfo values('xuyesheng3','123') insert userInfo values('xuyesheng4','123') insert userInfo values('xuyesheng5','123') insert userInfo values('xuyesheng6','123') Go select * from userInfo 数据库脚步有了,下面我们来写个通用分页的存储过程,其脚步如下: ---------------创建存储过程-------------- Go set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ------------------------------------ -- --用途:用于需要分页显示的数据 --时间:2009年08月22日 --描述:通用的存储过程分页程序 -- ------------------------------------- create PROCEDURE [dbo].[GetData] @tblName varchar(255), -- 表名 @fldName varchar(255), -- 字段名 @OrderfldName varchar(255), -- 排序字段名 @PageSize int = 10, -- 页尺寸 @PageIndex int = 1, -- 页码 @IsCount bit = 0, -- 返回记录总数, 非 0 值则返回 @OrderType bit = 0, -- 设置排序类型, 非 0 值则降序 @strWhere varchar(1000) = '' -- 查询条件 (注意: 不要加 where) AS declare @strSQL varchar(6000) -- 主语句 declare @strTmp varchar(500) -- 临时变量 declare @strOrder varchar(400) -- 排序类型 if @OrderType != 0 begin set @strTmp = '<(select min' set @strOrder = ' order by [' + @OrderfldName +'] desc' end else begin set @strTmp = '>(select max' set @strOrder = ' order by [' + @OrderfldName +'] asc' end set @strSQL = 'select top ' + str(@PageSize) + ' ' + @fldName + ' from [' + @tblName + '] where [' + @OrderfldName + ']' + @strTmp + '([' + @OrderfldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' + @OrderfldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)' + @strOrder if @strWhere != '' set @strSQL = 'select top ' + str(@PageSize) + ' ' + @fldName + ' from [' + @tblName + '] where [' + @OrderfldName + ']' + @strTmp + '([' + @OrderfldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' + @OrderfldName + '] from [' + @tblName + '] where ' + @strWhere + ' ' + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder if @PageIndex = 1 begin set @strTmp = '' if @strWhere != '' set @strTmp = ' where ' + @strWhere set @strSQL = 'select top ' + str(@PageSize) + ' ' + @fldName + ' from [' + @tblName + ']' + @strTmp + ' ' + @strOrder end if @IsCount != 0 begin if @strWhere != '' set @strSQL = 'select count(' + @OrderfldName + ') as Total from [' + @tblName + ']'+ ' where ' + @strWhere else set @strSQL = 'select count(' + @OrderfldName + ') as Total from [' + @tblName + ']' end exec (@strSQL) --测试下 Go ----参数说明exec [GetData] '表明','查找的列名* 表示查找所有信息','主键',页大小,第几页,非 --表示返回记录数,[排序类型,非则降序排列],条件 --得到分页的数据 exec [GetData] 'userInfo','*','userID',5,1,0,0,null --得到总共的条数 exec [GetData] 'userInfo','*','userID',5,1,1,0,null --根据条件查询 exec [GetData] 'userInfo','*','userID',5,1,0,0,' userID like ''%2%'' '