asp.net中常用到的SQL分页存储过程

80酷酷网    80kuku.com

  

asp.net中常用到的SQL分页存储过程

以下是引用片段:
create PROCEDURE [dbo].[myPage]
tblName varchar(255), -- 表名
fldName varchar(255), -- 排序的字段名,一般为唯一标识
strGetFields varchar(1000) = ’ * ’, -- 需要返回的列 
PageSize int = 10, -- 每页有多少条记录
PageIndex int = 1, -- 第几页
Count int output, -- 返回记录总数
OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
strWhere varchar(1500) = ’ 1=1 ’ -- 查询条件 (注意: 不要加 where,初始化为1=1使得查询条件永远不为空)
AS
declare strSQL varchar(5000) -- 主语句
declare strTmp varchar(110) -- 临时变量
declare strOrder varchar(400) -- 排序类型
declare sumsql nvarchar(3000) -- 记录总数
--执行总数统计。
set sumsql = ’select Count = count(*) from ’+tblname +’ where ’+strwhere
exec sp_executesql sumsql,N’Count int output’,Count output-- 纪录总数
--如果OrderType不是0,就执行降序
if OrderType != 0
begin
set strTmp = ’<(select min’
set strOrder = ’ order by [’ + fldName +’] desc’
end
else
begin
set strTmp = ’>(select max’
set strOrder = ’ order by [’ + fldName +’] asc’
end
--如果是第一页就执行以下代码,加快执行速度
if PageIndex = 1
set strSQL = ’select top ’ + str(PageSize) +’ ’+strGetFields+ ’
from [’ + tblName + ’] where ’ + strWhere + ’ ’ + strOrder
else
--以下代码赋予了strSQL以真正执行的SQL代码 
set strSQL = ’select top ’ + str(PageSize) +’  ’+strGetFields+ ’ from [’
+ tblName + ’] where [’ + fldName + ’]’ + strTmp + ’([’
+ fldName + ’]) from (select top ’ + str((PageIndex-1)*PageSize) + ’ [’
+ fldName + ’] from [’ + tblName + ’] where ’ + strWhere + ’ ’
+ strOrder + ’) as tblTmp) and ’ + strWhere + ’ ’ + strOrder
exec (strSQL)

分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: