sql连表分页查询(存储过程)
1.平时分页查询都比较多针对一个表的数据 而这个分页查询是针对连表查询的 ,这也是我网上改版别人的sql语句
先在数据库新建一个存储过程 拷贝以下代码
CREATE PROCEDURE [dbo].[usp_PageLF]
(
@tblName varchar(255), -- 表名
@tblName1 VARCHAR(255),--表名 连表字符串
@strGetFields varchar(1000) = '*', -- 需要返回的列
@strGetFields1 varchar(1000) = '*', --连表 需要返回的列
@fldName varchar(255)='', -- 排序的字段名
@fldName1 varchar(255)='', -- 连表 排序的字段名
@PageSize int = 40, -- 页尺寸
@PageIndex int = 1, -- 页码
@doCount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序 一般降序
@strWhere varchar(1500)='', -- 查询条件 (注意: 不要加 where)
@strWhere1 varchar(1500)='' --连表 查询条件 (注意: 不要加 where)
)
AS
declare @strSQL varchar(5000) -- 主语句
declare @strOrder varchar(400) -- 排序类型
declare @strOrder1 varchar(400) --连表 排序类型
SET @PageIndex=@PageIndex+1
if @doCount != 0
begin
if @strWhere !=''
set @strSQL = 'select count(*) as Total from ' + @tblName1 + ' where '+@strWhere1
else
set @strSQL = 'select count(*) as Total from ' + @tblName1
end
--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况
else
begin
if @OrderType != 0
begin
set @strOrder1 = 'order by ' + @fldName1 +' desc'
SET @strOrder='order by '+@fldName+' desc'
--如果@OrderType不是0,就执行降序,这句很重要!
end
else
begin
set @strOrder1 = 'order by ' + @fldName1 +' asc'
SET @strOrder=' order by ' + @fldName +' asc'
end
if @PageIndex = 1
begin
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields1+ ' from ' + @tblName1 + ' where ' + @strWhere1 + ' ' +@strOrder1
else
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields1+ ' from '+ @tblName1 + ' '+@strOrder1
--如果是第一页就执行以上代码,这样会加快执行速度
end
else
begin
--以下代码赋予了@strSQL以真正执行的SQL代码
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields1+ ' from '
+ @tblName1 + ' where ' + @fldName1 + ' not in ('+
'SELECT TOP ' + str((@PageIndex-1)*@PageSize)+' '+ @fldName+' FROM '+ @tblName+' '+ @strOrder+ ')'+' '+@strOrder1
--NOT IN (select top ' + str((@PageIndex-1)*@PageSize) + ' '+ @fldName + ' from ' + @tblName + 'ORDER BY id desc ' + ')
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields1+ ' from '
+ @tblName1 + ' where ' + @fldName1 +'NOT IN (select top ' + str((@PageIndex-1)*@PageSize) + ' '
+ @fldName + ' from ' + @tblName + ' where ' + @strWhere + ' '
+ @strOrder + ') and ' + @strWhere1 + ' ' + @strOrder1
end
end
EXEC(@strSQL)
.net 里调用如下
SqlParameter[] para1 ={
new SqlParameter("@tblName"," tb_Room "),
new SqlParameter("@tblName1"," tb_Room AS room INNER JOIN dbo.tb_RoomCgy AS roomCgy ON room.roomCgyId = roomCgy.id "),
new SqlParameter("@strGetFields"," * "),
new SqlParameter("@strGetFields1"," room.*,roomCgy.place AS roomCgyPlace "),
new SqlParameter("@fldName","id "),
new SqlParameter("@fldName1","room.id"),
new SqlParameter("@PageSize",Grid1.PageSize),
new SqlParameter("@PageIndex",Grid1.PageIndex),
new SqlParameter("@doCount",0),
new SqlParameter("@OrderType",1),
new SqlParameter("@strWhere",""),
new SqlParameter("@strWhere1","")
};
SqlConnection conn = SqlHelper.GetConnection();
//2.获取当前分页数据
DataTable table = SqlHelper.ExecuteDataset(conn, "usp_PageLF", para1).Tables[0]; (注:此处用微软的sqlhelper)
初次学习存储过程分页 有什么写得不好 有错 的地方 希望各位大神们多多指教
sql连表分页查询(存储过程)的更多相关文章
- 使用传入的总记录数实现一条sql语句完成分页查询
使用传入的总记录数实现一条sql语句完成分页查询 问题:在传统的分页查询的实现中不可避免的需要两条sql语句,一条用于查询数据一条用于查询总记录数.如下面的实际代码所示: Img1 当然如果使 ...
- 避免SQL全表模糊查询查询 下载文件时-修改文件名字
避免SQL全表模糊查询查询 1.模糊查询效率很低: 原因:like本身效率就比较低,应该尽量避免查询条件使用like:对于like %...%(全模糊)这样的条件,是无法使用索引的,全表扫描自然效 ...
- SQL多表连接查询
SQL多表连接查询 本文主要列举两张和三张表来讲述多表连接查询. 新建两张表: 表1:student 截图如下: 表2:course 截图如下: (此时这样建表只是为了演示连接SQL语句,当然实际 ...
- 【SQL】Oracle分页查询的三种方法
[SQL]Oracle分页查询的三种方法 采用伪列 rownum 查询前10条记录 ? 1 2 3 4 5 6 7 8 9 10 11 [sql] select * from t_user t whe ...
- 图解SQL多表关联查询
图解SQL多表关联查询 网上看了篇文章关于多表连接的,感觉很好,记录下来,以便日后自己学习 内连接 左连接 右连接 全外连接 1. 查两表关联列相等的数据 ...
- SQLServer分页查询存储过程
项目中用到的SQLServer分页查询存储过程. [存储过程] create PROCEDURE prcPageResult -- 获得某一页的数据 -- @currPage int = 1, ...
- 【原创】SQL分页查询存储过程
------------------------------------- -----作者:张欣宇 -----时间:2013-06-28 -----简介:根据参数和条件分页查询 ----------- ...
- JdbcTemplate+PageImpl实现多表分页查询
一.基础实体 @MappedSuperclass public abstract class AbsIdEntity implements Serializable { private static ...
- MySQL、Oracle和SQL Server的分页查询语句
假设当前是第PageNo页,每页有PageSize条记录,现在分别用Mysql.Oracle和SQL Server分页查询student表. 1.Mysql的分页查询: SELECT * FROM s ...
随机推荐
- yii框架的安装
在安装YII2.0首先我们需要下载一个composer,何为composer,简单解释为PHP的组件工具, Composer是PHP中用来管理依赖(dependency)关系的工具,你可以在自己的项目 ...
- web网站的url设计
通常再web网站设计url时是按功能模块设计url,然后再control层一个功能模块对应一个control层类,每个control类中的方法映射相应的url请求. 如果遇见另一个功能模块需要实现同样 ...
- try,catch,finally含return时的执行顺序及丢失的伪例
最近面试遇到一个之前也看到过但没去看一下的问题.就是有return情况下的try,catch,finally的执行顺序. 今天写了下. 先看顺序问题.总结如下: 一:finally中没有写return ...
- Evolution项目(1)
Evolution项目是基于NFine修改的项目 主要改动为: 支持了.net core 1.0 支持了 EF core 1.0 支持数据库自动创建及Demo数据自动灌入 修改了授权方式 新增加了一个 ...
- PHP基础班初学心得:用JQ实现表单的全选、反选、取消和删除功能
摘要: 本人刚参加PHP基础班培训,由于之前毫无基础,分享的心得可能不规范,方法也许也"旁门左道",不能保证质量,只作自己总结学习,也希望能帮助到同样是初学者的朋友们,共同进步. ...
- VS2015 VisualStudio Emulator for Android 模拟器目录
C:\Users\wangbin5542\AppData\Local\Microsoft\VisualStudioEmulator\Android\Containers\Local\Devices 目 ...
- OA工作流规格--转
工作流是整个OA系统的核心,也是BPM的核心,工作流到 底需要实现哪些功能,本文就此以用户的需求为蓝本进行阐述.工作流表面看起来是很简单的,无非是一个表单模板,一个流程定义,然后起草后根据设定的流程一 ...
- HDU 2732:Leapin' Lizards(最大流)
http://acm.hdu.edu.cn/showproblem.php?pid=2732 题意:给出两个地图,蜥蜴从一个柱子跳跃到另外一个地方,那么这个柱子就可能会坍塌,第一个地图是柱子可以容忍跳 ...
- 主机和虚拟机不能ping通问题
VMware的三种网络模式附上: 在vmw中,默认有3个虚拟交换机 分别是VMnet0(桥接).VMnet1(主机网络)以及VMnet8(NAT) 还可以根据需要添加VMnet2~VMnet7和VMn ...
- html标签快速转换思想方法
function htmlencode(s){ var div = document.createElement('div'); div.appendChild(document.createText ...