仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1354|回复: 7
打印 上一主题 下一主题

[学习教程] MSSQL网页设计分页 SQLServer存储历程

[复制链接]
分手快乐 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:42:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
在JOIN操作中(需要从多个数据表提取数据时),MySQL只有在主键和外键的数据类型相同时才能使用索引。server|sqlserver|存储历程|分页
/*--用存储历程完成的分页程序显现指定表、视图、查询了局的第X页关于表中主键或标识列的情形,间接从原表取数查询,别的情形利用一时表的办法假如视图或查询了局中有主键,不保举此办法--邹建2003.09--*//*--挪用示例execp_show区域材料execp_show区域材料,5,3,区域编号,区域称号,助记码,区域编号--*//*由于要顾及通用性,以是对带排序的查询语句有必定请求.假如先排序,再出了局.就是:execp_showselecttop100percent*from区域材料orderby区域称号,5,3,区域编号,区域称号,助记码,区域称号--查询语句加上:top100percent//top时*/ifexists(select*fromdbo.sysobjectswhereid=object_id(N[dbo].[p_show])andOBJECTPROPERTY(id,NIsProcedure)=1)dropprocedure[dbo].[p_show]GOCREATEProcp_show@QueryStrnvarchar(4000),--表名、视图名、查询语句@PageSizeint=10,--每页的巨细(行数)@PageCurrentint=1,--要显现的页@FdShownvarchar(4000)=,--要显现的字段列表,假如查询了局有标识字段,必要指定此值,且不包括标识字段@FdOrdernvarchar(1000)=--排序字段列表asdeclare@FdNamenvarchar(250)--表中的主键或表、一时表中的标识列名,@Id1varchar(20),@Id2varchar(20)--入手下手和停止的纪录号,@Obj_IDint--工具ID--表中有复合主键的处置declare@strfdnvarchar(2000)--复合主键列表,@strjoinnvarchar(4000)--毗连字段,@strwherenvarchar(2000)--查询前提select@Obj_ID=object_id(@QueryStr),@FdShow=caseisnull(@FdShow,)whenthen*else+@FdShowend,@FdOrder=caseisnull(@FdOrder,)whenthenelseorderby+@FdOrderend,@QueryStr=casewhen@Obj_IDisnotnullthen+@QueryStrelse(+@QueryStr+)aend--假如显现第一页,能够间接用top来完成if@PageCurrent=1beginselect@Id1=cast(@PageSizeasvarchar(20))exec(selecttop+@Id1+@FdShow+from+@QueryStr+@FdOrder)returnend--假如是表,则反省表中是不是有标识更或主键if@Obj_IDisnotnullandobjectproperty(@Obj_ID,IsTable)=1beginselect@Id1=cast(@PageSizeasvarchar(20)),@Id2=cast((@PageCurrent-1)*@PageSizeasvarchar(20))select@FdName=namefromsyscolumnswhereid=@Obj_IDandstatus=0x80if@@rowcount=0--假如表中无标识列,则反省表中是不是有主键beginifnotexists(select1fromsysobjectswhereparent_obj=@Obj_IDandxtype=PK)gotolbusetemp--假如表中无主键,则用一时表处置select@FdName=namefromsyscolumnswhereid=@Obj_IDandcolidin(selectcolidfromsysindexkeyswhere@Obj_ID=idandindidin(selectindidfromsysindexeswhere@Obj_ID=idandnamein(selectnamefromsysobjectswherextype=PKandparent_obj=@Obj_ID)))if@@rowcount>1--反省表中的主键是不是为复合主键beginselect@strfd=,@strjoin=,@strwhere=select@strfd=@strfd+,[+name+],@strjoin=@strjoin+anda.[+name+]=b.[+name+],@strwhere=@strwhere+andb.[+name+]isnullfromsyscolumnswhereid=@Obj_IDandcolidin(selectcolidfromsysindexkeyswhere@Obj_ID=idandindidin(selectindidfromsysindexeswhere@Obj_ID=idandnamein(selectnamefromsysobjectswherextype=PKandparent_obj=@Obj_ID)))select@strfd=substring(@strfd,2,2000),@strjoin=substring(@strjoin,5,4000),@strwhere=substring(@strwhere,5,4000)gotolbusepkendendendelsegotolbusetemp/*--利用标识列或主键为单一字段的处置办法--*/lbuseidentity:exec(selecttop+@Id1+@FdShow+from+@QueryStr+where+@FdName+notin(selecttop+@Id2++@FdName+from+@QueryStr+@FdOrder+)+@FdOrder)return/*--表中有复合主键的处置办法--*/lbusepk:exec(select+@FdShow+from(selecttop+@Id1+a.*from(selecttop100percent*from+@QueryStr+@FdOrder+)aleftjoin(selecttop+@Id2++@strfd+from+@QueryStr+@FdOrder+)bon+@strjoin+where+@strwhere+)a)return/*--用一时表处置的办法--*/lbusetemp:select@FdName=[ID_+cast(newid()asvarchar(40))+],@Id1=cast(@PageSize*(@PageCurrent-1)asvarchar(20)),@Id2=cast(@PageSize*@PageCurrent-1asvarchar(20))exec(select+@FdName+=identity(int,0,1),+@FdShow+into#tbfrom+@QueryStr+@FdOrder+select+@FdShow+from#tbwhere+@FdName+between+@Id1+and+@Id2)GO
在ORDERBY操作中,MySQL只有在排序条件不是一个查询条件表达式的情况下才使用索引。(虽然如此,在涉及多个数据表查询里,即使有索引可用,那些索引在加快ORDERBY方面也没什么作用)。
不帅 该用户已被删除
沙发
发表于 2015-1-19 21:32:42 | 只看该作者
大家注意一点。如下面的例子:
分手快乐 该用户已被删除
板凳
 楼主| 发表于 2015-1-28 11:40:25 | 只看该作者
在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。
透明 该用户已被删除
地板
发表于 2015-2-13 13:15:57 | 只看该作者
原来公司用过MYSQL自己也只是建个表写个SQL
精灵巫婆 该用户已被删除
5#
发表于 2015-3-3 21:49:54 | 只看该作者
一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。
小妖女 该用户已被删除
6#
发表于 2015-3-11 13:58:33 | 只看该作者
原来公司用过MYSQL自己也只是建个表写个SQL
再现理想 该用户已被删除
7#
发表于 2015-3-18 17:09:47 | 只看该作者
SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。
山那边是海 该用户已被删除
8#
发表于 2015-3-26 07:19:08 | 只看该作者
一个是把SQL语句写到客户端,可以使用DataSet进行加工;
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 13:15

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表