仓酷云

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

[学习教程] MSSQL网站制作之分页查询

[复制链接]
因胸联盟 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:28:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
用一个库#bak_database存放这些历史数据。分页
/*--用存储历程完成的分页程序

显现指定表、视图、查询了局的第X页
关于表中主键或标识列的情形,间接从原表取数查询,别的情形利用一时表的办法
假如视图或查询了局中有主键,不保举此办法

--*/

/*--挪用示例
execp_show区域材料

execp_show区域材料,5,3,区域编号,区域称号,助记码,区域编号
--*/

ifexists(select*fromdbo.sysobjectswhereid=object_id(N[dbo].[p_show])andOBJECTPROPERTY(id,NIsProcedure)=1)
dropprocedure[dbo].[p_show]
GO

CREATEProcp_show
@QueryStrnvarchar(4000),--表名、视图名、查询语句
@PageSizeint=10,--每页的巨细(行数)
@PageCurrentint=1,--要显现的页
@FdShownvarchar(4000)=,--要显现的字段列表,假如查询了局有标识字段,必要指定此值,且不包括标识字段
@FdOrdernvarchar(1000)=--排序字段列表
as
declare@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=1
begin
select@Id1=cast(@PageSizeasvarchar(20))
exec(selecttop+@Id1+@FdShow+from+@QueryStr+@FdOrder)
return
end

--假如是表,则反省表中是不是有标识更或主键
if@Obj_IDisnotnullandobjectproperty(@Obj_ID,IsTable)=1
begin
select@Id1=cast(@PageSizeasvarchar(20))
,@Id2=cast((@PageCurrent-1)*@PageSizeasvarchar(20))

select@FdName=namefromsyscolumnswhereid=@Obj_IDandstatus=0x80
if@@rowcount=0--假如表中无标识列,则反省表中是不是有主键
begin
ifnotexists(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--反省表中的主键是不是为复合主键
begin
select@strfd=,@strjoin=,@strwhere=
select@strfd=@strfd+,[+name+]
,@strjoin=@strjoin+anda.[+name+]=b.[+name+]
,@strwhere=@strwhere+andb.[+name+]isnull
fromsyscolumnswhereid=@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)
gotolbusepk
end
end
end
else
gotolbusetemp

/*--利用标识列或主键为单一字段的处置办法--*/
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+)a
leftjoin(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

在JOIN操作中(需要从多个数据表提取数据时),MySQL只有在主键和外键的数据类型相同时才能使用索引。
莫相离 该用户已被删除
沙发
发表于 2015-1-17 12:56:32 | 只看该作者
以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了
简单生活 该用户已被删除
板凳
发表于 2015-1-20 19:10:38 | 只看该作者
sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西
再见西城 该用户已被删除
地板
发表于 2015-1-29 15:35:28 | 只看该作者
having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。
柔情似水 该用户已被删除
5#
发表于 2015-2-6 02:30:46 | 只看该作者
where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
金色的骷髅 该用户已被删除
6#
发表于 2015-2-15 02:35:54 | 只看该作者
对一张百万级别的表建游标,同时又没有什么过滤条件,取得游标效率是如果直接SQL查询百万条数据;如果再对每条记录做处理,耗时将更长。
飘飘悠悠 该用户已被删除
7#
发表于 2015-3-4 11:09:44 | 只看该作者
SP4包括用于以下SQLServer2000组件的程序包:Database组件(下载文件:SQL2000-KB884525-SP4-x86.EXE)更新SQLServer2000的32位Database组件,包括数据库引擎、复制、客户端连接组件及工具。有关其他信息,请参阅ReadmeSql2k32Sp4.htm。AnalysisServices组件(下载文件:SQL2000.AS-KB884525-SP4-x86.EXE)更新SQLServer2000的32位AnalysisServices。
兰色精灵 该用户已被删除
8#
发表于 2015-3-11 18:42:55 | 只看该作者
SQL语言是学习所有数据库产品的基础,无论你是做数据库管理还是做数据库开发都是这样。不过具体学习的侧重点要看你将来做哪一块,如果是做数据库管理(DBA),侧重点应该放在SQLServer的系统管理上.
分手快乐 该用户已被删除
9#
发表于 2015-3-19 07:47:01 | 只看该作者
但换公司用MSSQL2K感觉自己好像根本就不了解MSSQL。什么DTS触发器以前根本没用过。
深爱那片海 该用户已被删除
10#
发表于 2015-3-27 14:25:36 | 只看该作者
having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-2 05:51

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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