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连表分页查询(存储过程)的更多相关文章

  1. 使用传入的总记录数实现一条sql语句完成分页查询

    使用传入的总记录数实现一条sql语句完成分页查询     问题:在传统的分页查询的实现中不可避免的需要两条sql语句,一条用于查询数据一条用于查询总记录数.如下面的实际代码所示: Img1 当然如果使 ...

  2. 避免SQL全表模糊查询查询 下载文件时-修改文件名字

    避免SQL全表模糊查询查询   1.模糊查询效率很低: 原因:like本身效率就比较低,应该尽量避免查询条件使用like:对于like %...%(全模糊)这样的条件,是无法使用索引的,全表扫描自然效 ...

  3. SQL多表连接查询

    SQL多表连接查询 本文主要列举两张和三张表来讲述多表连接查询. 新建两张表: 表1:student  截图如下: 表2:course  截图如下: (此时这样建表只是为了演示连接SQL语句,当然实际 ...

  4. 【SQL】Oracle分页查询的三种方法

    [SQL]Oracle分页查询的三种方法 采用伪列 rownum 查询前10条记录 ? 1 2 3 4 5 6 7 8 9 10 11 [sql] select * from t_user t whe ...

  5. 图解SQL多表关联查询

      图解SQL多表关联查询     网上看了篇文章关于多表连接的,感觉很好,记录下来,以便日后自己学习  内连接     左连接     右连接       全外连接   1. 查两表关联列相等的数据 ...

  6. SQLServer分页查询存储过程

    项目中用到的SQLServer分页查询存储过程. [存储过程] create PROCEDURE prcPageResult -- 获得某一页的数据 -- @currPage int = 1,     ...

  7. 【原创】SQL分页查询存储过程

    ------------------------------------- -----作者:张欣宇 -----时间:2013-06-28 -----简介:根据参数和条件分页查询 ----------- ...

  8. JdbcTemplate+PageImpl实现多表分页查询

    一.基础实体 @MappedSuperclass public abstract class AbsIdEntity implements Serializable { private static ...

  9. MySQL、Oracle和SQL Server的分页查询语句

    假设当前是第PageNo页,每页有PageSize条记录,现在分别用Mysql.Oracle和SQL Server分页查询student表. 1.Mysql的分页查询: SELECT * FROM s ...

随机推荐

  1. DNS压力测试工具dnsperf简介

    dnsperf是我最近写的一个开源的DNS压力测试工具,用户可以用它来对DNS服务器或者Local DNS做压力测试.dnsperf目前的实现是单进程模式,通过epoll非阻塞地处理网络事件. dns ...

  2. Coins

    Description Whuacmers use coins.They have coins of value A1,A2,A3...An Silverland dollar. One day Hi ...

  3. hdu 2037 今年暑假不AC

    今年暑假不AC Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  4. VS2010中汉字拷贝到Word出现乱码问题解决

    VS2010中的汉字拷贝到Word时出现乱码,有三种解决方法: 一.粘贴时,选择“仅保留文本”.如图: 二.先拷贝粘贴到记事本文件内,此时会自动过滤格式信息,再从记事本拷贝到Word. 三.使用转换软 ...

  5. FlasActionScript3随学随机

    1.跳转页面代码.下载代码(new URLRequest(下载地址)): var request1:URLRequest=new URLRequest("http://www.baidu.c ...

  6. 去除表单自动填充时,-webkit浏览器默认给文本框加的黄色背景

    input:-webkit-autofill { -webkit-box-shadow:inset 0 0 0 100px #2B2B35 inset; -webkit-text-fill-color ...

  7. 使用jquery-qrcode生成二维码

    一.使用jquery-qrcode生成二维码 先简单说一下jquery-qrcode,这个开源的三方库(可以从https://github.com/jeromeetienne/jquery-qrcod ...

  8. clock()、time()、clock_gettime()和gettimeofday()函数的用法和区别【转】

    转自:http://www.cnblogs.com/krythur/archive/2013/02/25/2932647.html 转自http://blog.sina.com.cn/s/blog_7 ...

  9. [linux系统]--spawn 用法

    spawn与except组合可达到远程登录设备执行命令的作用 下面是登录设备的一段代码 #!/usr/bin/expect -f user=root host=1.1.1.1 password=roo ...

  10. 【转】破解Source Insight 3.5.0072过程 附:安装软件+注册机

    转载地址:http://blog.csdn.net/qs_hud/article/details/8884867 注册机及软件下载地址:http://download.csdn.net/detail/ ...