- 浏览:
1010725 次
- 性别:
- 来自:
北京
-
IFOBJECT_ID(N'dbo.p_show')ISNOTNULL
DROPPROCEDUREdbo.p_show
GO
/**//*--实现分页的通用存储过程
显示指定表、视图、查询结果的第X页
对于表中主键或标识列的情况,直接从原表取数查询,其它情况使用临时表的方法
如果视图或查询结果中有主键,不推荐此方法
如果使用查询语句,而且查询语句使用了orderby,则查询语句必须包含top语句
最后更新时间:2008.01.20
--邹建2003.09(引用请保留此信息)--*/
/**//*--调用示例
EXECdbo.p_show
@QueryStr=N'tb',
@PageSize=5,
@PageCurrent=3,
@FdShow='id,colid,name',
@FdOrder='colid,name'
selectid,colidfromtb
orderbycolid,name
EXECdbo.p_show
@QueryStr=N'
SELECTTOP100PERCENT
*
FROMdbo.sysobjects
ORDERBYxtype',
@PageSize=5,
@PageCurrent=2,
@FdShow='name,xtype',
@FdOrder='xtype,name'
--*/
CREATEPROCdbo.p_show
@QueryStrnvarchar(4000),--表名、视图名、查询语句
@PageSizeint=10,--每页的大小(行数)
@PageCurrentint=1,--要显示的页
@FdShownvarchar(4000)=N'',--要显示的字段列表,如果查询结果不需要标识字段,需要指定此值,且不包含标识字段
@FdOrdernvarchar(1000)=N''--排序字段列表
AS
SETNOCOUNTON
DECLARE
@FdNamesysname,--表中的主键或表、临时表中的标识列名
@Id1sysname,--开始和结束的记录号
@Id2sysname,
@Obj_IDint--对象ID
--表中有复合主键的处理
DECLARE
@strfdnvarchar(2000),--复合主键列表
@strjoinnvarchar(4000),--连接字段
@strwherenvarchar(2000)--查询条件
SELECT
@Obj_ID=OBJECT_ID(@QueryStr),
@FdShow=CASE
WHEN@FdShow>N''THENN''+@FdShow
ELSEN'*'
END,
@FdOrder=CASE
WHEN@FdOrder>N''THENN'ORDERBY'+@FdOrder
ELSEN''
END,
@QueryStr=CASE
WHEN@Obj_IDISNULLTHENN'('+@QueryStr+N')A'
ELSEN''+@QueryStr
END
--如果显示第一页,可以直接用top来完成
IF@PageCurrent=1
BEGIN
SELECT
@Id1=CAST(@PageSizeasvarchar(20))
EXEC(N'
SELECTTOP'+@Id1+N'
'+@FdShow+N'
FROM'+@QueryStr+N'
'+@FdOrder
)
RETURN
END
--如果是表,则检查表中是否有标识更或主键
IF@Obj_IDISNULLOROBJECTPROPERTY(@Obj_ID,'IsTable')=0
GOTOlb_usetemp
ELSE
BEGIN
SELECT
@Id1=CAST(@PageSizeasvarchar(20)),
@Id2=CAST((@PageCurrent-1)*@PageSizeasvarchar(20))
--标识列
SELECT
@FdName=name
FROMdbo.syscolumns
WHEREid=@Obj_ID
ANDstatus=0x80
IF@@ROWCOUNT=0--如果表中无标识列,则检查表中是否有主键
BEGIN
DECLARE
@pk_numberint
SELECT
@strfd=N'',
@strjoin=N'',
@strwhere=N''
SELECT
@strfd=@strfd
+N','+QUOTENAME(name),
@strjoin=@strjoin
+N'ANDA.'+QUOTENAME(name)
+N'=B.'+QUOTENAME(name),
@strwhere=@strwhere
+N'ANDB.'+QUOTENAME(name)+N'ISNULL'
FROM(
SELECT
IX.id,IX.indid,
IXC.colid,ixc.keyno,
C.name
FROMdbo.sysobjectsO,
dbo.sysindexesIX,
dbo.sysindexkeysIXC,
dbo.syscolumnsC
WHEREO.parent_obj=@Obj_ID
ANDO.xtype='PK'
ANDO.name=IX.name
ANDIX.id=@Obj_ID
ANDIX.id=IXC.id
ANDIX.indid=IXC.indid
ANDIXC.id=C.id
ANDIXC.colid=C.colid
)A
ORDERBYkeyno
SELECT
@pk_number=@@ROWCOUNT,
@strfd=STUFF(@strfd,1,1,N''),
@strjoin=STUFF(@strjoin,1,5,N''),
@strwhere=STUFF(@strwhere,1,5,N'')
IF@pk_number=0
GOTOlb_usetemp--如果表中无主键,则用临时表处理
ELSEIF@pk_number=1
BEGIN
SELECT
@FdName=@strfd
GOTOlb_useidentity--使用单一主键
END
ELSE
GOTOlb_usepk--使用复合主键
END
END
/**//*--使用标识列或主键为单一字段的处理方法--*/
lb_useidentity:
EXEC(N'
SELECTTOP'+@Id1+N'
'+@FdShow+N'
FROM'+@QueryStr+N'
WHERE'+@FdName+'NOTIN(
SELECTTOP'+@Id2+N'
'+@FdName+'
FROM'+@QueryStr+N'
'+@FdOrder+N')
'+@FdOrder+N'
')
RETURN
/**//*--表中有复合主键的处理方法--*/
lb_usepk:
EXEC(N'
SELECT
'+@FdShow+N'
FROM(
SELECTTOP'+@Id1+N'
A.*
FROM'+@QueryStr+N'A
LEFTJOIN(
SELECTTOP'+@Id2+N'
'+@strfd+N'
FROM'+@QueryStr+N'
'+@FdOrder+N'
)B
ON'+@strjoin+N'
WHERE'+@strwhere+N'
'+@FdOrder+N'
)A
'+@FdOrder+N'
')
RETURN
/**//*--用临时表处理的方法--*/
lb_usetemp:
SELECT
@FdName=QUOTENAME(N'ID_'+CAST(NEWID()asvarchar(40))),
@Id1=CAST(@PageSize*(@PageCurrent-1)asvarchar(20)),
@Id2=CAST(@PageSize*@PageCurrent-1asvarchar(20))
EXEC(N'
SELECT
'<sp
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
SQLite 查询所有 分页查询 查询个数
基于springmvc实现分页查询基于springmvc实现分页查询
Android开发之数据库的分页查询
hbase分页查询实现.pdf
jdbc分页查询,利用mysql的limit实现分页查询。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...
主要介绍了解决MybatisPlus插件分页查询不起作用总是查询全部数据问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
分页查询是Oracle数据库比较重要的一个知识点!希望这个对你有参照作用。
JPA分页查询与条件分页查询JPA分页查询与条件分页查询JPA分页查询与条件分页查询JPA分页查询与条件分页查询JPA分页查询与条件分页查询JPA分页查询与条件分页查询JPA分页查询与条件分页查询JPA分页查询与条件分页查询...
用Struts2+mysql实现的简单信息录入,分页查询
基于winform的分页查询技术,主要用的vs2013跟sql server 2008,效率挺高,需要的朋友可以下载,相互学习。
Hibernate HQL查询 分页查询 模糊查询.docxHibernate HQL查询 分页查询 模糊查询.docxHibernate HQL查询 分页查询 模糊查询.docxHibernate HQL查询 分页查询 模糊查询.docxHibernate HQL查询 分页查询 模糊查询....
解决Oracle分页查询中排序与效率问题解决Oracle分页查询中排序与效率问题解决Oracle分页查询中排序与效率问题解决Oracle分页查询中排序与效率问题
ArcGIS API for Flex 2.0开发应用之分页查询
本人博客中的代码Jsp+Servlet+MyBatis完成分页查询 http://blog.csdn.net/japanstudylang/article/details/51700874
分页查询
MyBatis Plus 的多表联接、分页查询实现方法 http://localhost/common/getAllQuestionByPage/1/10 多表关联、分页查询接口 http://localhost/common/getAllQuestionWithStudentByPage/1/10
SpringBoot整合mybatis-plus实现多数据源的动态切换且支持分页查询,案例以postgresql和oracle数据库为数据源,分别使用mybatis-plus分页插件和pagehelper分页插件实现分页查询。
sqlserver分页查询语句;sqlserver分页查询语句;sqlserver分页查询语句;
oracle分页查询并返回总记录数据的存储过程