建议看看bom表.
[url]http://hi.[/url]
CREATE TABLE t(
科目 NVARCHAR(60), --节点
隶属 NVARCHAR(60), --父节点
)
INSERT INTO t VALUES(N'网络应用',N'计算机')
INSERT INTO t VALUES(N'网络安全',N'网络应用')
INSERT INTO t VALUES(N'网络编程',N'网络安全')
INSERT INTO t VALUES(N'图像设计',N'计算机')
INSERT INTO t VALUES(N'PHOTOSHOP',N'图像设计')
GO
CREATE FUNCTION dbo.TreeResult(@Parent NVARCHAR(60))
RETURNS @T TABLE(科目 NVARCHAR(60),隶属 NVARCHAR(60),
Level INT,SORT NVARCHAR(1000))
AS
BEGIN
DECLARE @Level INT
SET @Level=1
INSERT INTO @T SELECT 科目,隶属,@Level,隶属+科目
FROM t
WHERE 隶属=@Parent
WHILE @@ROWCOUNT>0
BEGIN
SET @Level=@Level+1
INSERT INTO @T SELECT a.科目,a.隶属,@Level,b.SORT+a.科目
FROM t a,@t b
WHERE a.隶属=b.科目 AND b.Level=@Level-1
END
RETURN
END
GO
SELECT Level,SPACE(2*(Level-1))+'|--'+科目 AS 科目
FROM dbo.TreeResult(N'计算机')
ORDER BY SORT
DROP TABLE t
DROP FUNCTION TreeResult
/*
Level
科目
----------- ---------------
1
|--图像设计
2
|--PHOTOSHOP
1
|--网络应用
2
|--网络安全
3
|--网络编程
(所影响的行数为 5 行)
*/