改写了下通用存储过程分页,支持多表关联查询与排序.
/****************************************************
**获取分页数据的通用存储过程,支持多表关联查询
**作者:蔡鸟非菜
**根据sql语句:
**select table1.*,table2.* into #tblTemp from table1,table2 where .. order by id
**select top 10 * from #tblTemp where id >= (select max(id) from (select top ((页码-1)*页大小) id from #tblTemp)
**Function dbo.TrimColumn(@orderName) 去除字段的前缀 例如 @str = dbo.TrimColumn('A.ID') 则@str为'ID'
*****************************************************/
Create PROCEDURE GetDataPage
(
@tblName varchar(255), --表名 例如:set @tblName = 'table1 A,table2 B'
@strGetFields varchar(1000), --要显示的列的名称 例如:set @strGetFields = 'A.ID,A.条码,B.仓库名称'
@orderName varchar(255), --用来排序的字段名称 例如:set @orderName = 'A.ID'
@orderType bit, --设置排序类型,升序0,其他降序 例如:set @orderType = '0'
@pageSize int, --页显示的数据条数 例如:set @pageSize = '10'
@pageIndex int, -- 页码 例如:set @pageIndex = '1'
@doCount bit, --返回记录总数,非则返回
@strWhere varchar(1500) --查询条件 例如:set @strWhere = 'and A.仓库ID = B.ID'
)
AS
declare @strSQL varchar(8000) -- 存放主SQL语句
declare @strTmp varchar(110) -- 临时变量
declare @strOrder varchar(400) -- 排序类型
if @DoCount != 0 --需要返回记录总数时
begin
if @strWhere != ''
set @strSQL = 'select count(*) as Total from ' + @tblName + ' where 1 = 1 ' + @strWhere
else
set @strSQL = 'select count(*) as Total from ' + @tblName + ''
end
else --不需要返回记录总数时
begin
if @orderType != '0'
begin
set @strTmp = '<= (select min'
set @strOrder = ' order by ' + @orderName +' desc'
end
else
begin
set @strTmp = '>= (select max'
set @strOrder = ' order by ' + @orderName +' asc'
end
-- 查询的如果是第一页时
if @pageIndex = 1
begin
if @strWhere != ''
set @strSQL = 'select top '+ str(@PageSize) + ' ' + @strGetFields + ' from ' + @tblName + ' where 1 = 1 ' + @strWhere + ' ' + @strOrder
else
set @strSQL = 'select top '+ str(@PageSize) + ' ' + @strGetFields + ' from ' + @tblName + ' '+ @strOrder
end
else --不是第一页时
begin
if @orderType != '0'
begin
set @strOrder = ' order by ' + dbo.TrimColumn(@orderName) +' desc'
end
else
begin
set @strOrder = ' order by ' + dbo.TrimColumn(@orderName) +' asc'
end
set @strSQL = 'select ' + @strGetFields + ' into #tblTemp from ' + @tblName + ' where 1 = 1 ' + @strWhere + ' ' + @strOrder
+ ' select top ' + str(@PageSize) + ' * from [#tblTemp] '
+ ' where [' + dbo.TrimColumn(@orderName) + '] ' + @strTmp + '(['+ dbo.TrimColumn(@orderName) + ']) from (select top '
+ str((@PageIndex-1)*@PageSize) + ' [' + dbo.TrimColumn(@orderName) + '] from [#tblTemp]) as tblTmp) ' + @strOrder
+ ' drop table #tblTemp '
end
end
exec(@strSQL)
RETURN
分享到:
相关推荐
效率极高的通用分页存储过程,支持夺表关联。
oracle数据库的查询分页加条件和排序的通用型存储过程,通过将表名以参数的形式传入到存储过程中做到多表通用,也可以是多表关联的sql语句 将其看作一个表也能调用该存储过程,分页只需要传与页数,和每页显示的行数...
在提供的`.sql`文件中,很可能是包含了创建这样一个通用分页存储过程的代码,可能包含示例的使用方法。分析和理解这个文件将有助于进一步理解和应用这些概念。在实际操作中,应根据具体的数据库系统(如MySQL、SQL ...
【Winform 通用分页控件】 ...通过以上步骤,我们可以构建出一个功能齐全、易用且高效的Winform通用分页控件,满足各种数据展示需求。在实际项目中,这样的控件可以大大提升应用的用户体验和性能。
在这个“GridView通用分页”主题中,我们主要探讨的是如何实现GridView的高效、灵活的分页功能。 分页是提高用户体验的关键因素,特别是在处理大量数据时。GridView内置了分页支持,但默认设置可能不能满足所有需求...
为了创建一个更通用的分页存储过程,我们可以编写一个名为`[dbo].[UP_GetRecordByPage]`的存储过程,它具有以下几个参数: 1. `@tblName`:表名,允许用户指定要查询的任何表。 2. `@fldName`:主键字段名,通常...
下面将详细解释如何在一个高效简洁的方式下实现Struts分页。 首先,我们需要理解分页的基本原理。分页通常是通过在数据库中限制查询结果的数量,每次只加载一定数量的数据(称为一页),然后根据用户的交互(如点击...
创建一个存储过程来处理分页逻辑,可以减少网络传输,提升性能。在存储过程中,可以设置输入参数如每页记录数和当前页码,返回符合条件的数据。然而,使用存储过程可能会增加数据库的维护复杂性。 4. 物理分页 物理...
通过动态构建WHERE条件、JOIN条件以及ORDER BY子句,代码能够灵活应对不同场景下的分页需求,如多表关联、复杂查询条件等。 ### 总结 Struts框架下的分页实现,不仅依赖于框架本身的机制,还需要深入理解数据库的...
MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs...
MyBatis作为持久层框架,与SQL紧密关联,允许开发者编写自定义的SQL、存储过程以及高级映射。在本示例中,MyBatis与Spring结合,通过Spring的DataSource配置实现数据库连接。此外,通用Mapper是一个强大的MyBatis...
实现这一功能通常需要设计角色表、用户表和角色-用户关联表,然后在PHP代码中进行权限检查。 综上所述,这个“php通用网站后台管理”项目涵盖了PHP编程、MySQL数据库设计与管理、jQuery前端交互等多个核心技术点。...
6. **分页**:当留言数量过多时,使用分页功能可以提高用户体验。PHP可以通过计算总页数,根据页码查询数据库的部分记录,实现分页显示。这通常用到`LIMIT`和`OFFSET`关键字来限制查询结果的数量。 在提供的...
- **事件绑定**:每个分页按钮都需要关联一个JavaScript函数,例如`indexpage`,该函数接受当前页码作为参数,用于改变页面内容。 - **AJAX请求**:当用户点击分页按钮时,使用`ajaxfunction`发送AJAX请求到后台。...
│ │ 7.2.3 临时表缓存实现的通用分页存储过程.sql │ │ 7.2.4 使用系统存储过程实现的通用分页存储过程.sql │ │ 7.3.1 实现随机分页的通用分页存储过程.sql │ │ 7.3.2 根据分类表实现的分页存储过程.sql │ ...
这些表之间可能存在关联,如学生ID与考试成绩的关联,以便进行关联查询。 4. Web框架:虽然没有明确提到,但通常这样的项目会使用某种PHP框架,如Laravel、CodeIgniter或Yii等,以提高开发效率和代码可维护性。框架...
Linux的存储管理系统旨在支持多用户多任务环境,并通过虚拟页式存储的方式为用户提供巨大的虚拟地址空间。在i386平台上,每个进程能够访问高达4GB的虚拟地址空间。 #### 二、Linux存储管理的主要内容 Linux存储...
在本篇ExtJs学习资料中,我们探讨了如何从服务器获取JSON数据并进行分页处理。这是一项在Web应用程序中非常常见的任务,特别是在构建数据密集型界面时。下面我们将详细阐述实现这一功能的关键步骤和涉及的技术点。 ...
1. **基础概念**:MyBatis-Plus是一个轻量级的Java框架,主要功能包括自动化 CRUD(创建、读取、更新、删除)操作,支持自定义SQL、存储过程以及丰富的查询条件构造器。 2. **Entity实体类**:在MyBatis-Plus中,...
这里`PageSupport`是自定义的一个分页支持类,用于封装分页参数,如当前页数、每页记录数等。`findByPage`方法接收一个`PageSupport`对象,返回当前页的数据列表。 接着,我们关注`PageSupport.java`。这个类通常...