最近在使用sqlserver2005的数据库编码,查到有一个row_number(order by 【字段】)的函数,通过该函数进行分页非常的方便,请大家看看我写的分页存储过程。
--分页存储过程
create procedure [dbo].[proc_TestPage]
--表名
@tablename nvarchar(255),
--排序字段
@sortcolumn nvarchar(255),
--每页记录数
@pagecount int,
--页号
@pageindex int
as
declare @beginrow int
declare @endrow intset @beginrow=0
set @endrow=0set @beginrow=(@pageindex-1)*@pagecount+1
set @endrow=@pageindex*@pagecountdeclare @sqlstr nvarchar(4000)set @sqlstr='with table1 as(select *,ROW_NUMBER() OVER(ORDER BY '+ @sortcolumn+' ) AS ROW'+
' FROM '+@tablename+') '
set @sqlstr=@sqlstr +' SELECT * FROM TABLE1 WHERE ROW BETWEEN '+cast(@beginrow as nvarchar )+' and '+cast(@endrow as nvarchar)exec(@sqlstr)
--分页存储过程
create procedure [dbo].[proc_TestPage]
--表名
@tablename nvarchar(255),
--排序字段
@sortcolumn nvarchar(255),
--每页记录数
@pagecount int,
--页号
@pageindex int
as
declare @beginrow int
declare @endrow intset @beginrow=0
set @endrow=0set @beginrow=(@pageindex-1)*@pagecount+1
set @endrow=@pageindex*@pagecountdeclare @sqlstr nvarchar(4000)set @sqlstr='with table1 as(select *,ROW_NUMBER() OVER(ORDER BY '+ @sortcolumn+' ) AS ROW'+
' FROM '+@tablename+') '
set @sqlstr=@sqlstr +' SELECT * FROM TABLE1 WHERE ROW BETWEEN '+cast(@beginrow as nvarchar )+' and '+cast(@endrow as nvarchar)exec(@sqlstr)
还是top好。
top not in 这个性能最差,不推荐,因为每次都要读取二次表。
rownumber 分页,性能也很强,是SQLSERVER2005新增的方式,优点是使用记录行数来作为排序字段,记录连续很强大,可扩展性能也强。
配合ObjectDataSource分页很方便。
但有点不太明白 为什么EXEC后面不接存储过程的名称 而是一个变量名
不知道大家测试如何
TOP 500万的TOP临时快
非专业猜测 欢迎拍砖
LZ看看这个