感谢前几天大家的帮助,贡献一段实现ORACLE中CONNECT BY的代码

mahongxi 2005-03-19 05:02:11
建立表:
CREATE TABLE [TT_TEST9] (
[BH] [numeric](10, 0) NOT NULL ,
[FBH] [numeric](10, 0) NULL ,
[NAME] [nvarchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
[DL] [numeric](2, 0) NULL
) ON [PRIMARY]
GO


编号 父编号 姓名 ...
1 0 a 0
2 1 b 0
3 2 c 0
4 2 d 0
5 1 f 0
6 0 g 0
要求选出所有顶级编号为1的记录(即父编号或父编号的父编号.. 为1)
ORACLE中:
select * from TT_Test9 start with bh = 1 connect by fbh = prior bh
SQLServer中:

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO

CREATE FUNCTION sp_TT_TEST9_hierarchy1(@current int)
RETURNS @ctest TABLE (BH int,FBH int, NAME varchar(200), DL int, level int, rownum int IDENTITY(1,1))
AS
BEGIN
declare @id int
DECLARE @ctest1 TABLE(BH int,FBH int, NAME varchar(200), DL int, level int)
DECLARE @level int;
SELECT @level = 1;

INSERT INTO @ctest1 select *,@level from TT_TEST9 where bh = @current
DECLARE cur CURSOR FOR select bh from @ctest1
open cur
FETCH NEXT FROM cur into @id
WHILE ( @@FETCH_STATUS = 0)
BEGIN
select @level = level from @ctest1 where bh = @id;
insert into @ctest1 select *, @level + 1 from TT_TEST9 where fbh = @id order by bh;
FETCH NEXT FROM cur into @id
END

INSERT INTO @ctest SELECT * FROM @ctest1

RETURN
END



GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO






用的时候:
select * from sp_TT_TEST9_hierarchy1(1)
...全文
119 3 打赏 收藏 举报
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
pjy998 2005-05-20
學習。
  • 打赏
  • 举报
回复
mahf 2005-05-16
mark
  • 打赏
  • 举报
回复
skyinfo 2005-03-19
mark
  • 打赏
  • 举报
回复
发帖
MS-SQL Server
加入

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
申请成为版主
帖子事件
创建了帖子
2005-03-19 05:02
社区公告
暂无公告