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. python web框架之django环境搭建

    一.django环境搭建 https://www.djangoproject.com/download/ 下载适合自己的版本,在右边有压缩包版本的,也可以到git上去拽.我用的python27,下载的 ...

  2. SqlServer try catch 捕获不到的一些错误及解决方法(转载)

    测试注意 :①假如系统能捕获异常 ,并且我们自己开启了事务.系统会自动 回滚事务的,但是 我们还是要在catch里面加上 rollback tran的习惯,这样也不会提示重复rollback的错误,这 ...

  3. 解决从jenkins打开robot framework报告会提示‘Opening Robot Framework log failed ’的问题

    最新的jenkins打开jenkins robot framework报告会提示如下 Verify that you have JavaScript enabled in your browser.  ...

  4. 转载:谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词

    转载: 谈谈Unicode编码,简要解释UCS.UTF.BMP.BOM等名词 这是一篇程序员写给程序员的趣味读物.所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级 ...

  5. C++数组实现的循环队列

    #include<iostream> #include <string> /* 功能:数组实现的循环队列,C++实现,学习参考 */ using namespace std; ...

  6. unrar.dll 使用实例

    /* * main.cpp * * Created on: Aug 17, 2015 * Author: smallcroco * * Discription: * 1 首先打开解压包,可以设置打开方 ...

  7. The connection to adb is down,and a server error has occured.解决办法---------------------亲测有效

    认真读error: 办法一: 点击项目右键->Android tools ->Fix Project Properties,检查项目属性 办法二: 设备管理器,查看是否存在adb进程 如果 ...

  8. Mysql数据库的使用总结之ERROR 1146 (42S02)

    在使用mysql数据库过程中,遇到了错误ERROR 1146 (42S02):Table doesn't exist,经过了两天,终于解决了这个问题.引起该错误的原因不同,对应的解决方法也不同.这里只 ...

  9. 加密connectionStrings

    开始菜单>>所有程序>>Microsoft visual studio 2010 >> Visual Studio Tools >> Visual St ...

  10. php常用函数(持续中)

    字符串 折分字符串:split和explode 函数原型:array split (string $pattern, string $string [, int $limit])           ...