设为首页
加入收藏
联系我们
首页 基础教程 技术文档 实例分析 数 据 库 疑难杂症 ASP.NET 七夕许愿树 技术论坛
同学网,基于同学关系的真实社区
<%-- 最新动态 Begin --%> <%-- 最新动态 End --%>
最新文章
 C#摄像头编程实例
 C#下用P2P技术实现点…
 Asp.net(c#)数…
 SQL Server数据…
 .NET牛人应该知道些什…
 NET牛人应该知道些什么
 SQL Server S…
 备份指定表到另一数据库
 SQLSERVER中快速…
 ASP.NET中url传…
 ASP.NET自动给UR…
 ASP.NET 2.0防…
 ASP.NET 2.0 …
 如何解决ASP.net中…
 sql server 与…
<%-- 最新动态 Begin --%> <%-- 最新动态 End --%>
推荐文章
 关于C#中的REF和黓认…
 读书笔记c#高级编程 委…
 【算法】C#快速排序类
 Visual C#的SQ…
 C#中调用API
 Infragistics…
 C#接口转换
 C#读取设备信息
 用.net操作word
 C# MessageBo…
 Visual C#中的数…
 雅虎公司C#笔试题,看看…
 C#.NET使用NHib…
 .net学习之运算符重载…
 Visual C# 3.…
<%-- 最新动态 Begin --%> <%-- 最新动态 End --%>
热门文章
 ADO.Net与ADO在…
 开发ASP.NET下的M…
 用C#+XMI技术进行U…
 什么是虚拟机?
 C#基础全接触
 C#学习第一天
 雅虎公司C#笔试题,看看…
 C#语言初级入门(1)
 C#中利用正则表达式实现…
 远程重启计算机(C#)
 用.net操作word
 什么是B/S三层?
 VB和C# 语法对比图 …
 Visual C#常用函…
 Visual C#的SQ…
通用分页显示查询存储过程
阅读正文 文字大小:增大 减小  文字行距:增大 减小   双击自动滚屏
本文由中国C#技术学习中心整理  如果你对本文有不明之处请到技术论坛讨论!

/*
 功能描述: 通用分页显示查询
    如果有自增标识字段,在@strGetFields中不要加入此字段信息,
    如果非要加入的话,要 (fldName + 0) AS fldName 这样处理;
 输入参数:
    @tblName:  表名  
    @strGetFields: 需要返回的列 '*':返回所以列信息
    @PageSize:  页尺寸
    @PageIndex:  页码
    @doCount:  返回记录总数, 非 0 值则返回
    @strOrderBy: 排序字段信息,(注意: 不要加 ORDER BY)
        格式: Field1 DESC, Field2 ASC
    @strWhere:  查询条件,(注意: 不要加 WHERE)
 输出参数: @RecordCount: 记录总数
 作    者: ningfeiyang
 创建时间: 2005-01-21
 更改纪录:
*/
ALTER PROCEDURE Pagination2
 (
  @tblName   varchar(255),
  @strGetFields varchar(1000) = '*',
  @PageSize   int = 10,
  @PageIndex  int = 1,
  @doCount  bit = 0,
  @strOrderBy varchar(500) = '',
  @strWhere  varchar(1500) = '',
  @RecordCount int output
 )
AS
 -- 主语句
 DECLARE @strSQL varchar(5000) SET @strSQL = ''
 -- 排序变量
 DECLARE @strOrder varchar(400) SET @strOrder = ''
 
 SET @RecordCount = 0
 --如果@doCount传递过来的不是0,就执行总数统计
 IF (@doCount != 0)
 BEGIN
  DECLARE @sWhere varchar(2000)
  
  SET @sWhere = ''
  IF (@strWhere != '')
   SET @sWhere = ' WHERE ' + @strWhere
   
  SET @strSQL = 'if exists (select * from dbo.sysobjects where id = object_id(''[dbo].[tmpTable]'') and OBJECTPROPERTY(id, ''IsUserTable'') = 1) '
  SET @strSQL = @strSQL + ' UPDATE tmpTable SET Total = (SELECT COUNT(*) FROM [' + @tblName + '] ' + @sWhere + ') '
  SET @strSQL = @strSQL + ' ELSE SELECT COUNT(*) AS Total INTO tmpTable FROM [' + @tblName + '] ' + @sWhere
   
  EXEC (@strSQL)
  
  SELECT @RecordCount=Total FROM tmpTable
  
  --删除总数统计临时表
  EXEC ('DROP TABLE tmpTable')
 END
 
 PRINT @RecordCount
 
 --排序字段信息
 IF (@strOrderBy != '')
  SET @strOrder = ' ORDER BY ' + @strOrderBy
 --如果是第一页就执行以下代码,这样会加快执行速度
 IF (@PageIndex = 1)
 BEGIN
  IF (@strWhere != '') 
   SET @strSQL = 'SELECT TOP ' + str(@PageSize) + ' ' + @strGetFields + '  FROM [' + @tblName + '] WHERE ' + @strWhere + @strOrder
  ELSE
   SET @strSQL = 'SELECT TOP ' + str(@PageSize) + ' ' + @strGetFields + '  FROM ['+ @tblName + '] '+ @strOrder
 END
 ELSE
 BEGIN
  --为搜索表建立自动编号 保存到临时表中
  SET @strSQL = 'SELECT TOP ' + str(@PageIndex*@PageSize) + ' IDENTITY(int,1,1) AS IID, ' + @strGetFields + ' INTO #tmpTable FROM [' + @tblName + ']'
  IF (@strWhere != '')
   SET @strSQL = @strSQL + ' WHERE ' + @strWhere + @strOrder
  ELSE
   SET @strSQL = @strSQL + @strOrder
 
  --以下代码赋予了@strSQL以真正执行的SQL代码
  SET @strSQL = @strSQL + ' SELECT ' + @strGetFields + ' FROM #tmpTable WHERE IID > ' + str((@PageIndex-1)*@PageSize) + ' DROP TABLE #tmpTable'
 END
 
 PRINT @strSQL
 
 --执行分页查询
 EXEC (@strSQL)



本文由中国C#技术学习中心整理  如果你对本文有不明之处请到技术论坛讨论!

中国C#技术交流QQ群:6337034  10976424  9383681  35248582  35248645
版权所有:中国C#技术学习中心 Copyright ? 2006-2008
建议浏览分辨率使用:1024*768分辨率
粤ICP备05002251号