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为:
1
2
3
4
2.再将1的子查出,设置子的level为+1,将1.1,1.2放到临时表#TreeViewTemp,将1放到结果表#TreeViewResult,删掉1,设置level=level+1
此时结构#TreeViewTemp为:
2
3
4
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为:
2
3
4
1.2
1.1.1
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为:
2
3
4
1.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为:
2
3
4
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 .
@versionIdvarchar(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,
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
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
页:
[1]