MYSQL网页编程之SQL Server 2005 中的树形数据处置示例...
你不用花费很多时间和金钱来培训现有的职工,或者去花大价钱雇用那些拥有各种证书的开发者。因为MySQL的维护和管理在很大程度上是“傻瓜型”的。server|示例|数据SQLServer2005中的树形数据处置示例--创立测试数据
ifexists(select*fromdbo.sysobjectswhereid=object_id(N)andOBJECTPROPERTY(id,NIsUserTable)=1)
droptable
GO
--示例数据
createtable(intPRIMARYKEY,int,namenvarchar(20))
INSERTSELECT1,0,N中国
UNIONALLSELECT2,0,N美国
UNIONALLSELECT3,0,N加拿年夜
UNIONALLSELECT4,1,N北京
UNIONALLSELECT5,1,N上海
UNIONALLSELECT6,1,N江苏
UNIONALLSELECT7,6,N姑苏
UNIONALLSELECT8,7,N常熟
UNIONALLSELECT9,6,N南京
UNIONALLSELECT10,6,N无锡
UNIONALLSELECT11,2,N纽约
UNIONALLSELECT12,2,N旧金山
GO
--查询指定id的一切子
ifexists(select*fromdbo.sysobjectswhereid=object_id(N.)andxtypein(NFN,NIF,NTF))
dropfunction.
GO
--=====================================================
--查询指定id的一切子
--邹建2005-07(援用请保存此信息)
--挪用示例
/*--挪用(查询一切的子)
SELECTA.*,条理=B.
FROMA,f_cid(2)B
WHEREA.=B.
--*/
--=====================================================
CREATEFUNCTIONf_cid(@idint)
RETURNSTABLE
AS
RETURN(
WITHctb(,)
AS(
SELECT,1FROM
WHERE=@id
UNIONALL
SELECTA.,B.+1
FROMA,ctbB
WHEREA.=B.)
SELECT*FROMctb
--假如只显现最明细的子(上面没有子),则将下面这句改成上面的
--SELECT*FROMctbA
--WHERENOTEXISTS(
--SELECT1FROMWHERE=A.)
)
GO
--挪用(查询一切的子)
SELECTA.*,条理=B.
FROMA,f_cid(2)B
WHEREA.=B.
GO
--查询指定id的一切父
ifexists(select*fromdbo.sysobjectswhereid=object_id(N.)andxtypein(NFN,NIF,NTF))
dropfunction.
GO
--=====================================================
--查询指定id的一切父
--邹建2005-07(援用请保存此信息)
--挪用示例
/*--挪用(查询一切的父)
SELECTA.*,条理=B.
FROMA,(2)B
WHEREA.=B.
--*/
--=====================================================
CREATEFUNCTION(@idint)
RETURNSTABLE
AS
RETURN(
WITHptb(,)
AS(
SELECT,1FROM
WHERE=@id
AND0
UNIONALL
SELECTA.,B.+1
FROMA,ptbB
WHEREA.=B.
AND0)
SELECT*FROMptb
)
GO
--挪用(查询一切的父)
SELECTA.*,条理=B.
FROMA,(7)B
WHEREA.=B.
GO
--树形分级显现
ifexists(select*fromdbo.sysobjectswhereid=object_id(N.)andxtypein(NFN,NIF,NTF))
dropfunction.
GO
--=====================================================
--级别及排序字段(树形分级显现)
--邹建2005-07(援用请保存此信息)
--挪用示例
/*--挪用完成树形显现
--挪用函数完成分级显现
SELECTN|+REPLICATE(-,B.*4)+A.name
FROMA,f_id()B
WHEREa.=b.
ORDERBYb.sid
--固然,这个也能够基本不必写函数,间接排序便可
WITHstb(,,)
AS(
SELECT,1,CAST(RIGHT(10000+,4)asvarchar(8000))
FROM
WHERE=0
UNIONALL
SELECTA.,B.+1,B.sid+RIGHT(10000+A.,4)
FROMA,stbB
WHEREA.=B.)
SELECTN|+REPLICATE(-,B.*4)+A.name
FROMA,stbB
WHEREa.=b.
ORDERBYb.sid
--*/
--=====================================================
CREATEFUNCTIONf_id()
RETURNSTABLE
AS
RETURN(
WITHstb(,,)
AS(
SELECT,1,CAST(RIGHT(10000+,4)asvarchar(8000))
FROM
WHERE=0
UNIONALL
SELECTA.,B.+1,B.sid+RIGHT(10000+A.,4)
FROMA,stbB
WHEREA.=B.)
SELECT*FROMstb
)
GO
--挪用函数完成分级显现
SELECTN|+REPLICATE(-,B.*4)+A.name
FROMA,f_id()B
WHEREa.=b.
ORDERBYb.sid
GO
表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。 所以你总能得到相应的升级版本,来满足你的需求。 如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。 你觉得我的非分区索引无法对起子分区,你可以提醒我一下呀!没有任何的提醒,直接就变成了非分区表。不知道这算不算一个bug。大家也可以试试。 微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。 很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。 另一个是把SQL语句写到服务器端,就是所谓的SP(存储过程); 分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。 对一张百万级别的表建游标,同时又没有什么过滤条件,取得游标效率是如果直接SQL查询百万条数据;如果再对每条记录做处理,耗时将更长。
页:
[1]