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 ...
随机推荐
- Syntax highlighting in fenced code blocks
Python @requires_authorization def somefunc(param1='', param2=0): r'''A docstring''' if param1 > ...
- 化繁为简,最简易的SqlDataSource配合Cache使用~
最近一个小项目用了比较方便傻瓜的DevExpress控件,实践中DevExpress的控件确实很方便. 在用ASPxGridView控件的时候,为了偷懒结合了SqlDataSource使用,但一直在大 ...
- url传参中文乱码
当使用url重定向传参的时候,比如: javascript:window.location.href='modifyBook.jsp?BName=<%=URLEncoder.encode(&qu ...
- HUD 5050 Divided Land
http://acm.hdu.edu.cn/showproblem.php?pid=5050 题目大意: 给定一个矩形的长和宽,把这个矩形分成若干相等的正方形,没有剩余.求正方形的边长最长是多少. 解 ...
- Centos 7 mysql Buffered warning: Changed limits: max_connections: 214 解决方法
Everytime I restart MySQL I have this warning: [Warning] Buffered warning: Changed limits: max_conne ...
- html5,表单的综合案例
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- python 国内源
pipy国内镜像目前有: http://pypi.douban.com/ 豆瓣 http://pypi.hustunique.com/ 华中理工大学 http://pypi.sdutlinux.o ...
- JavaScript笔记 Function
在JavaScript中方法由两部分组成: 方法名和方法体. JavaScript中的方法跟其他传统面向对象语言不同,它跟普通的变量没有区别,唯一不同点是它是Function对象,因此它会有一些Fun ...
- T-SQL存储过程、游标
Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. Ø ...
- WCF、MongoDB
http://www.cnblogs.com/quietwalk/archive/2011/08/09/2132573.html http://www.cnblogs.com/huangxinchen ...