表名ffice
列名:employeeid 主键,name,birthday,sex,address.....
查询 第4页 5行 (先理解此select语句)
select top 5 * from office where employeeid>(select max(employeeid) from(select top 15 * from office order by employeeid)as tab)
请理解:假设查询 第4页 5行 ;那么从什么开始,到什么结束能 从(5*(4-1)+1)开始 从(4*5)结束
创建存储过程 (注:[]意思是可省略)
create proc[edure] paging
as
with temp as ----创建一张临时表
(select *,row_number() over(order by employeeid asc)) as en
from office where 1=1) ------row_number() over(order by employeeid asc))as en 意思是创建标识列,并且起了一个别名en
select * from temp where en between 1 and 10 ---从临时表中查询标识列在1到10的数据
go ---批处理
我想你一定会说这个代码怎么是死的呢,要是我换了数据库不是不能用了吗!下面我们就创建一个灵活的分页存储过程!依据上面的基本代码
create proc[edure] paging
@PageIndex int =1,---第几页 (等号后面的是默认值,无等号的在调用存储过程是一定要赋值)
@PageSize int =10,---显示几行
@tablename varchar(20), ---数据库表名
@strGetFields varchar(1000)=\'*\', ----需要查询的列名
@fldName varchar(255), ----排序的列名
@ordertype varchar(10)=\'asc\', ---排序类型(不是升序(asc)就是降序(desc))
@strWhere varchar(100)=\'\' ---where条件 此处where条件设为空值
as
derclare @str varchar(2000) ---重点:此处声明了一个字符串变量!用来存储下面的T--sql 语句
set @str=\'with temp as
(select \'+@strGetFields+\',row_number(order by \'+@fldName+\' \'+@ordertype+\' ) as en from \'+@tablename+\' where 1=1 \'+@strwhere+\' )
select * from temp where en between \'+str(@PageSize*(@PageIndex-1)+1)+\' and \'+str(@PageSize*@PageIndex)
exec sp_executesql @str ---此处是调用系统存储过程 执行字符串@str中的语句
print @str --打印T--sql语句
go
注:此代码是本人亲自敲打的,因本人技术欠佳,,有错误的地方 请见谅!!!!! |