SQL 递归查询示例Word文档下载推荐.docx
- 文档编号:463357
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:15
- 大小:18.76KB
SQL 递归查询示例Word文档下载推荐.docx
《SQL 递归查询示例Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《SQL 递归查询示例Word文档下载推荐.docx(15页珍藏版)》请在冰点文库上搜索。
select*fromhgo
/*
Department
ParentDept
DepartManage
rank
---------------------------------------------------------------------
技术部
总经办
Tom
0
程序组
技术部
GiGi
1
设计组
yoyo
专项组
程序组
Yue
2
*/
--查询部门经理是GiGi的上级部门名称
selecth.*,h1.rank+1from#EnterPrisehjoinhgoh1onh.Department=h1.ParentDept
------------------------------------------
-----------
-----------
总经办
Boss
--===========================================================================================================
createtable#tt
(idint,
parentidint,
namevarchar(20))
insert#tt
select1,0,'
上海市'
unionall
select2,1,'
虹口区'
select3,1,'
徐汇区'
select4,1,'
浦东新区'
select5,2,'
江湾镇'
select6,2,'
虹口足球场'
select7,5,'
吉买盛'
select8,5,'
易卜莲花'
select9,5,'
农工商'
select10,6,'
withcteas(
select*,0aslevlfrom#ttwhereid=2
selecta.*,b.levl+1from#tta,ctebwherea.parentid=b.id
select*fromctewherelevl>
--
id
parentidname
levl
-----------------------------------------------------
5
2江湾镇
6
2虹口足球场
10
6吉买盛
7
5吉买盛
8
5易卜莲花
9
5农工商
==============================================================================================
ifnotobject_id('
Tab'
)isnull
droptableTab
Go
CreatetableTab([Id]int,[ParentId]int,[Name]nvarchar(50))
InsertTab
select1,0,N'
select2,1,N'
select3,1,N'
select4,1,N'
select5,2,N'
select6,2,N'
select7,5,N'
select8,5,N'
select9,5,N'
select10,6,N'
IFOBJECT_ID('
P_GetParentId'
)isnotnulldropprocP_GetParentId
go
CreateprocP_GetParentId
@ParentIdint
as
begin
declare@Deltable(IDint,[ParentId]int)
insert@DelselectID,[ParentId]fromTaba
whereexists(select1fromTabwherea.Id=2)
while
@@rowcount>
begin
insert@Del
selecta.ID,a.[ParentId]
fromTaba
innerjoin@Delbonb.ID=a.[ParentId]
wherenotexists(select1from@DelwhereID=a.ID)
end
select*from@Del
end
gO
--TEST
EXECP_GetParentId2
--结果
--
ID
ParentId
----------------------
2
5
6
7
5
8
9
10
6
--============================================================================================
--SQLcode
标题:
SQLSERVER2000中查询指定节点及其所有子节点的函数(表格形式显示)
作者:
爱新觉罗·
毓华(十八年风雨,守得冰山雪莲花开)
时间:
2008-05-12
地点:
广东深圳
createtabletb(idvarchar(3),pidvarchar(3),namevarchar(10))
insertintotbvalues('
001'
null
'
广东省'
002'
广州市'
003'
深圳市'
004'
天河区'
005'
罗湖区'
006'
福田区'
007'
宝安区'
008'
西乡镇'
009'
龙华镇'
010'
松岗镇'
go
--查询指定节点及其所有子节点的函数
createfunctionf_cid(@IDvarchar(3))returns@t_leveltable(idvarchar(3),levelint)
declare@levelint
set@level=1
insertinto@t_levelselect@id,@level
while@@ROWCOUNT>
set@level=@level+1
insertinto@t_levelselecta.id,@level
fromtba,@t_Levelb
wherea.pid=b.idandb.level=@level-1
return
--调用函数查询001(广东省)及其所有子节点
selecta.*fromtba,f_cid('
)bwherea.id=b.idorderbya.id
id
pid
name
------------------
001
NULL广东省
002
001
广州市
003
深圳市
004
002
天河区
005
003
罗湖区
006
福田区
007
宝安区
008
007
西乡镇
009
龙华镇
010
松岗镇
(所影响的行数为10行)
--调用函数查询002(广州市)及其所有子节点
(所影响的行数为2行)
--调用函数查询003(深圳市)及其所有子节点
(所影响的行数为7行)
droptabletb
dropfunctionf_cid
SQLcode
@@ROWCOUNT:
返回受上一语句影响的行数。
返回类型:
integer。
注释:
任何不返回行的语句将这一变量设置为0,如IF语句。
示例:
下面的示例执行UPDATE语句并用@@ROWCOUNT来检测是否有发生更改的行。
UPDATEauthorsSETau_lname='
Jones'
WHEREau_id='
999-888-7777'
IF@@ROWCOUNT=0
print'
Warning:
Norowswereupdated'
结果:
(所影响的行数为0行)
Norowswereupdated
SQLSERVER2005中查询指定节点及其所有子节点的函数(表格形式显示)
2010-02-02
新疆乌鲁木齐
createtabletb(idvarchar(3),pidvarchar(3),namenvarchar(10))
N'
DECLARE@IDVARCHAR(3)
--查询ID='
的所有子节点
SET@ID='
WITHTAS
SELECTID,PID,NAME
FROMTB
WHEREID=@ID
UNIONALL
SELECTA.ID,A.PID,A.NAME
FROMTBASAJOINTASBONA.PID=B.ID
SELECT*FROMTORDERBYID
PID
NAME
------------------
(10行受影响)
(2行受影响)
(7行受影响)
--注:
除ID值不一样外,三个SQL语句是一样的。
--===============================================================================
declare@ttable(idintidentity(1,1),parentidint,namevarchar(10))
insert@t(parentid,name)select0,'
unionallselect1,'
unionallselect2,'
unionallselect5,'
unionallselect6,'
select*from@t
withtbas
select*from@t
whereid=2
selecta.*from@tajointbbona.parentid=b.id
select*fromtb
orderbyid
parentid
name
--------------------------------
1
0
上海市
1
虹口区
3
徐汇区
4
浦东新区
2
江湾镇
虹口足球场
吉买盛
易卜莲花
农工商
--============================================================================
drop
table
tb
go
create
tb(code
int,su_code
int)
insert
into
tb(code,su_code)
values(1,null)
values(11,1)
values(12,1)
values(111,11)
values(112,11)
values(121,12)
in
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 递归查询示例 递归 查询 示例