海东的技术资料
博客园
::
首页
:: ::
联系
::
订阅
::
管理
::
204 随笔 :: 22 文章 :: 664 评论 :: 55 Trackbacks
SQL语句对表中父子节点正向和反向取所有节点
CREATE
TABLE
[
dbo
]
.
[
temptb
]
(
[
id
]
[
int
]
IDENTITY
(
1
,
1
)
NOT
NULL
,
[
pid
]
[
int
]
NULL
,
[
name1
]
[
varchar
]
(
20
) ,
[
name
]
[
nvarchar
]
(
50
) ,
[
parentid
]
[
int
]
NULL
,
CONSTRAINT
[
PK_temptb
]
PRIMARY
KEY
CLUSTERED
(
[
id
]
ASC
)
WITH
(PAD_INDEX
=
OFF
, STATISTICS_NORECOMPUTE
=
OFF
, IGNORE_DUP_KEY
=
OFF
, ALLOW_ROW_LOCKS
=
ON
, ALLOW_PAGE_LOCKS
=
ON
)
ON
[
PRIMARY
]
)
ON
[
PRIMARY
]
GO
/**/
/*
创建函数 根据节点id找出其所有父节点
*/
create
function
f_pid(
@id
int
)
returns
@re
table
(id
int
,
level
int
)
as
begin
declare
@l
int
set
@l
=
0
insert
@re
select
@id
,
@l
while
@@rowcount
>
0
begin
set
@l
=
@l
+
1
insert
@re
select
a.pid,
@l
from
temptb a,
@re
b
where
a.id
=
b.id
and
b.
level
=
@l
-
1
and
a.pid
<>
0
end
update
@re
set
level
=
@l
-
level
return
end
go
/**/
/*
*/
select
a.
*
,b.
level
from
temptb a,f_pid(
7
) b
where
a.id
=
b.id
order
by
b.
level
go
/**/
/*
创建函数 根据节点id 找出所有子节点
*/
create
function
c_tree(
@initid
int
)
/**/
/*
定义函数c_tree,输入参数为初始节点id
*/
returns
@t
table
(id
int
,name
varchar
(
100
),parentid
int
,lev
INT
,byid
int
)
/**/
/*
定义表t用来存放取出的数据
*/
begin
declare
@i
int
/**/
/*
标志递归级别
*/
set
@i
=
1
insert
@t
select
id,name,parentid,
@i
,byid
=
@initid
from
temptb
where
id
=
@initid
while
@@rowcount
<>
0
begin
set
@i
=
@i
+
1
insert
@t
select
a.id,a.name,a.parentid,
@i
,
@initid
from
temptb
as
a,
@t
as
b
where
b.id
=
a.parentid
and
b.lev
=
@i
-
1
end
return
END
/**/
/*
在上面的函数中由于表变量使用了两次,性能很差 ,下面的性能要高些
*/
create
function
[
dbo
]
.
[
UF_GetOwnerSKUNumber
]
()
RETURNS
@b
table
(id
int
,byid
int
)
BEGIN
DECLARE
@t
table
(id
int
,lev
INT
,byid
int
)
declare
@i
int
/**/
/*
标志递归级别
*/
set
@i
=
1
insert
@t
select
c.id,
@i
,c.byid
from
[
temptb
]
c
WITH
(NOLOCK)
WHERE
[
pid
]
=
0
OR
[
parentid
]
IS
NULL
OR
parentid
NOT
IN
(
SELECT
id
FROM
[
temptb
]
WHERE
id
=
c.id)
while
@@rowcount
<>
0
begin
set
@i
=
@i
+
1
insert
@b
SELECT
a.id,b.byid
from
[
temptb
]
as
a
WITH
(NOLOCK) ,
@t
as
b
where
b.id
=
a.parentid
and
b.lev
=
@i
-
1
end
RETURN
END
select
*
from
c_tree( )
/**/
/*
把所有行转换为一个字符串
*/
DECLARE
@FileClassName
nvarchar
(
max
)
SET
@FileClassName
=
''
SELECT
@FileClassName
=+
@FileClassName
+
CONVERT
(
varchar
(
20
),id)
+
'
,
'
FROM
[
temptb
]
a
WHERE
pid
=
0
SELECT
@FileClassName
AS
a
posted on 2008-05-08 16:26
高海东
阅读(223)
评论(1)
编辑
收藏
所属分类:
SQL SERVER 2000
、
SQL SERVER 2005
评论
#1楼
2008-05-08 19:38
晴天水族s [未注册用户]
如果下次加点注释,再说明一下,其未来可用的方向,就更完美了。
没有看明白了,是不是想做了一些类似于用递归完成的无限分级之类的东西?
回复
引用
社区
新闻
新用户注册
刷新评论列表
标题
姓名
主页
Email
(只有博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
另存
打印
所属分类的其他文章:
·
SQL语句对表中父子节点正向和反向取所有节点
·
精妙的SQL和SQL SERVER 与ACCESS、EXCEL的数据导入导出转换
·
整理的一些T-sql(二)
·
怎样检测网络中的电脑是否有安装SQL 2000
·
整理了一些t-sql技巧
·
用asp.net还原与恢复sqlserver数据库(转)
·
SQL Server中的几个方法和Transact SQL 常用语句以及函数[个人推荐]
·
SQL行列转换实战
·
分页存储过程
·
两台SQL Server数据同步解决方案
最新IT新闻:
·
Mozilla将于本周五发布Firefox 3.1第一个预览版
·
瑞星将向个人用户免费1年
·
中国互联网历史上最伟大的产品TOP10(二)
·
盖茨官方否认天价租楼看奥运 纯属地产商炒作
·
2008年7月24日IT博客精选
博客园新闻频道
博客园首页
社区
<
2008年5月
>
日
一
二
三
四
五
六
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
公告
电子邮箱:ghd258@gmail.com MSN:
ghd258@hotmail.com
您是第
位访问者
与我联系
发短消息
我参加的小组
Web技术联盟
我参与的团队
.NET 控件与组件开发(1/1338)
广州.NET俱乐部(0/1692)
Ajax&Atlas技术团队(1/1131)
.NetFramework3.0 & 3.5(WCF,WPF,WF)团队(1/561)
微软(西安).NET开发俱乐部(2/732)
随笔分类
(216)
.Net Remoting
(rss)
ADO.NET 2.0(4)
(rss)
AJAX(1)
(rss)
ASP.NET(57)
(rss)
ASP.NET 2.0(38)
(rss)
C#(15)
(rss)
CSS(4)
(rss)
Enterprise Library (2)
(rss)
JS(21)
(rss)
NUnit(1)
(rss)
Oracle(6)
(rss)
SQL SERVER 2000(22)
(rss)
SQL SERVER 2005(11)
(rss)
WEB SERVICE(1)
(rss)
Windows Workflow Foundation (5)
(rss)
WINFORM
(rss)
XML(6)
(rss)
功能函数(5)
(rss)
俱乐部事宜(2)
(rss)
其他
(rss)
软件工程(3)
(rss)
数据库
(rss)
水晶报表(3)
(rss)
图片(3)
(rss)
项目管理(4)
(rss)
业界新闻(1)
(rss)
正则表达式(1)
(rss)
智能客户端技术
(rss)
文章分类
(23)
.Net Remoting
(rss)
ADO.NET
(rss)
ASP.NET(10)
(rss)
ASP.NET2.0
(rss)
C#(2)
(rss)
CSS
(rss)
js(5)
(rss)
Oracle
(rss)
SQL SERVER 2000(5)
(rss)
SQL SERVER 2005
(rss)
WEB SERVICE 技术
(rss)
XML
(rss)
项目管理(1)
(rss)
智能客户端技术
(rss)
相册
我的家园
我的证书
收藏夹
(325)
ADO.NET(21)
(rss)
ADO.NET 2.0
(rss)
ASP.NET(94)
(rss)
ASP.NET 2.0(116)
(rss)
C#(16)
(rss)
JS(23)
(rss)
NUnit(5)
(rss)
SQL SERVER 2000(12)
(rss)
SQL SERVER 2005(20)
(rss)
WEB SERVICE(14)
(rss)
XML(3)
(rss)
智能客户端技术(1)
(rss)
连接
BizTalk学习笔记系列
DooIT(ttyp)
Gmail - 收件箱
MSDN Webcast 中心
NFramework开源AOP框架
Rickie Lee's blog
zlz_212的专栏(Dundas Chart )
代码生成工具CodePlusV2.0
老赵点滴“深入Atlas系列”
清清月儿 .NET
深圳.NET 俱乐部
我CSDN的BLOG
邀月的博客日记
搜索
积分与排名
积分 - 353567
排名 - 60
最新随笔
1. 微软西安.NET俱乐部(.NET User Group) 邀请主讲讲师
2. 热烈庆祝西安.NET俱乐部加入微软.NET俱乐部(.NET User Group)
3. Enterprise Library 4.0 - May 2008 发布了
4. SQL语句对表中父子节点正向和反向取所有节点
5. 微软(西安).NET俱乐部成立聚会和Visual Studio 2008 社区发布全国巡展邀请函
6. 西安.NET俱乐部聚会活动意见征询
7. 数据库设计经验之谈(转载)
8. “保证软件测试质量的4个根基”主题培训峰会
9. 数据回发时,维护ASP.NET Tree控件位置
10. 国内项目开发过程分析总结
11. 解析.Net框架下的XML编程技术 (转载)
12. asp.net2.0导出pdf文件完美解决方案(转载)
13. 关于IE6和IE7关闭窗口时提示和不提示以及上传图片前的本地预览解决办法
14. ASP.NET2.0打通文件图片处理任督二脉(转载)
15. 项目开发经验谈(二)
16. 项目开发经验谈(一)
17. 在项目开发总的一些感受,希望大家共同来探讨项目管理中的一些看法
18. js技巧收集(200多个) (转)
19. [Javascript] 如何在客户端验证表单被改变
20. 如何去掉ie里面的关闭按钮,和屏蔽ALT+F4 (转载)
21. 深入理解JavaScript中的函数
22. 庆祝"西安.NET俱乐部"成立,请申请加入的朋友在这里报到
23. 在SQL Server 2005中用存储过程实现搜索功能
24. 55种网页常用小技巧(javascript)
25. 精妙的SQL和SQL SERVER 与ACCESS、EXCEL的数据导入导出转换
26. 基于RBAC模型的通用权限管理系统的设计(数据模型)的扩展
27. ASP.NET 中处理页面“回退”的方法
28. 在 ASP.NET 上实现锁定表头、支持滚动的表格的做法
29. 事半功倍系列之javascript (转载)
30. 利用键盘上的上下左右(回车)键模拟出tab 键的功能上下左右移动焦点
Powered by:
博客园
Copyright © 高海东