欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

sql server 树形构造的创建

更新时间: 2014-01-05 02:07:04 责任编辑: Author_N1

 

sql server 树形结构的创建
需要用到树形结构,在看了http://www.cnblogs.com/zplutor/archive/2009/07/31/1536146.html,原作只说了大概思路,让人费解,下面用比较清晰的过程描述下:
表结构:
lib_items:
version_iditem_idparent_iddesc


1
  1.1
    1.1.1
    1.1.2 
  1.2
2
3
4

思路:
1.先将1,2,3,4设为第0级,放到临时表#TreeViewTemp
此时结构#TreeViewTemp为:
[0] 1
[0] 2    
[0] 3
[0] 4

2.再将1的子查出,设置子的level为+1,将1.1,1.2放到临时表#TreeViewTemp,将1放到结果表#TreeViewResult,删掉1,设置level=level+1
此时结构#TreeViewTemp为:
[0] 2    
[0] 3
[0] 4
[1] 1.1
[1] 1.2

此时结构#TreeViewResult为:
1
   
3.查询level为1的第一个item,查到1.1,查询1.1的子为1.1.1,1.1.2,设置level为2放到临时表#TreeViewTemp,将1.1放到结果表#TreeViewResult,在临时表中删掉1.1,设置level=level+1
此时结构#TreeViewTemp为:
[0] 2    
[0] 3
[0] 4
[1] 1.2
[2] 1.1.1
[2] 1.1.2

此时结构#TreeViewResult为:
1
   1.1

4.查询level为2的第一个item,查到1.1.1,查询1.1.1的子为空,将1.1.1放到结果表#TreeViewResult,在临时表中删掉1.1.1,设置level=level+1
此时结构#TreeViewTemp为:
[0] 2    
[0] 3
[0] 4
[1] 1.2
[2] 1.1.2

此时结构#TreeViewResult为:
1
  1.1
    1.1.1

5.查询level为3的,为空,level-1,进入下一次,树结构没变
6.查询level为2的第一个item,查询到1.1.2,查询1.1.2的子为空,将1.1.2放到结果表#TreeViewResult,在临时表中删掉1.1.2,设置level=level+1
此时结构#TreeViewTemp为:
[0] 2    
[0] 3
[0] 4
[1] 1.2

此时结构#TreeViewResult为:
1
  1.1
    1.1.1
    1.1.2

7,count一直减到1,操作1.2的,以此类推,最终结果会是:
此时结构#TreeViewResult为:
1
  1.1
    1.1.1
    1.1.2 
  1.2
2
3
4

完整代码如下:
ALTER PROCEDURE [dbo].[sp_items_level_test]
	@versionId			varchar(30)
AS
BEGIN
	DECLARE @item_id varchar(20), @Level int;
	SET @Level = 0

	CREATE TABLE #TreeViewTemp
	(
	 item_id varchar(20) NOT NULL,
	 desc nvarchar(500) NOT NULL,
	 parent_id varchar(20) NULL,
	 [Level] int NOT NULL
	)
	CREATE TABLE #TreeViewResult
	(
	 item_id varchar(20) NOT NULL,
	 desc nvarchar(500) NOT NULL
	)

	INSERT #TreeViewTemp
	SELECT item_id, desc, parent_id, @Level
	FROM lib_items
	WHERE parent_id = '' and version_id = @versionId

	WHILE EXISTS (SELECT item_id FROM #TreeViewTemp)
	BEGIN

	 SELECT TOP(1) @item_id = item_id
	 FROM #TreeViewTemp
	 WHERE [Level] = @Level
	 ORDER BY item_id

	 IF @@ROWCOUNT = 0
	 BEGIN
	  SET @Level = @Level - 1
	  CONTINUE
	 END

	 INSERT #TreeViewResult
	 SELECT item_id, SPACE(4 * @Level) + desc0
	 FROM #TreeViewTemp
	 WHERE item_id = @item_id

	 INSERT #TreeViewTemp
	 SELECT item_id, desc, parent_id, @Level + 1
	 FROM lib_items
	 WHERE parent_id = @item_id and version_id = @versionId

	 IF @@ROWCOUNT <> 0
	  SET @Level = @Level + 1
	 
	 DELETE #TreeViewTemp
	 WHERE item_id = @item_id

	END

	SELECT item_id, desc0 FROM #TreeViewResult

	DROP TABLE #TreeViewTemp
	DROP TABLE #TreeViewResult
END
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:07:04
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/5809/
本文WWW.DOC100.NET DOC100.NET版权所有。