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 ...
随机推荐
- DNS压力测试工具dnsperf简介
dnsperf是我最近写的一个开源的DNS压力测试工具,用户可以用它来对DNS服务器或者Local DNS做压力测试.dnsperf目前的实现是单进程模式,通过epoll非阻塞地处理网络事件. dns ...
- Coins
Description Whuacmers use coins.They have coins of value A1,A2,A3...An Silverland dollar. One day Hi ...
- hdu 2037 今年暑假不AC
今年暑假不AC Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- VS2010中汉字拷贝到Word出现乱码问题解决
VS2010中的汉字拷贝到Word时出现乱码,有三种解决方法: 一.粘贴时,选择“仅保留文本”.如图: 二.先拷贝粘贴到记事本文件内,此时会自动过滤格式信息,再从记事本拷贝到Word. 三.使用转换软 ...
- FlasActionScript3随学随机
1.跳转页面代码.下载代码(new URLRequest(下载地址)): var request1:URLRequest=new URLRequest("http://www.baidu.c ...
- 去除表单自动填充时,-webkit浏览器默认给文本框加的黄色背景
input:-webkit-autofill { -webkit-box-shadow:inset 0 0 0 100px #2B2B35 inset; -webkit-text-fill-color ...
- 使用jquery-qrcode生成二维码
一.使用jquery-qrcode生成二维码 先简单说一下jquery-qrcode,这个开源的三方库(可以从https://github.com/jeromeetienne/jquery-qrcod ...
- clock()、time()、clock_gettime()和gettimeofday()函数的用法和区别【转】
转自:http://www.cnblogs.com/krythur/archive/2013/02/25/2932647.html 转自http://blog.sina.com.cn/s/blog_7 ...
- [linux系统]--spawn 用法
spawn与except组合可达到远程登录设备执行命令的作用 下面是登录设备的一段代码 #!/usr/bin/expect -f user=root host=1.1.1.1 password=roo ...
- 【转】破解Source Insight 3.5.0072过程 附:安装软件+注册机
转载地址:http://blog.csdn.net/qs_hud/article/details/8884867 注册机及软件下载地址:http://download.csdn.net/detail/ ...