首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL SERVER 2005中如何实现树型数据

2012-02-27 
SQL SERVER 2005中怎么实现树型数据?我有一个表,角色ID | 角色名 | 父角色ID001Role1002Role2001003Role30

SQL SERVER 2005中怎么实现树型数据?
我有一个表, 
角色ID | 角色名 | 父角色ID
001 Role1  
002 Role2 001
003 Role3 002
004 Role4 003
现在我要查询Role4 , 找到所有它的父角色 ? 先谢谢了.


[解决办法]
CREATE TABLE T (
角色ID VARCHAR(20),
角色名 VARCHAR(20),
父角色ID VARCHAR(20)
)

INSERT INTO T
SELECT '001','Role1',NULL UNION ALL
SELECT '002','Role2','001' UNION ALL
SELECT '003','Role3','002' UNION ALL
SELECT '004','Role4','003'
GO
CREATE FUNCTION F_TREE(@name VARCHAR(20))
RETURNS @t TABLE(角色ID VARCHAR(20),
角色名 VARCHAR(20),
父角色ID VARCHAR(20),
[Level] INT
)
AS
BEGIN
DECLARE @i INT
SET @i = 0

INSERT INTO @t
SELECT *,@i FROM T WHERE 角色名 = @Name 
WHILE @@ROWCOUNT <> 0
BEGIN
SET @i = @i + 1
INSERT INTO @t
SELECT B.角色ID, B.角色名,B.父角色ID,@i FROM @t A, t B WHERE A.父角色ID = B.角色ID AND A.[Level] = @i - 1
END
 RETURN 
END
GO

SELECT 角色ID, 角色名,父角色ID FROM dbo.F_TREE('Role4') WHERE LEVEL<> 0 ORDER BY level DESC 

DROP FUNCTION F_TREE
DROP TABLE T 


角色ID 角色名 父角色ID
-------------------- -------------------- -------------------- 
001 Role1 NULL
002 Role2 001
003 Role3 002

(所影响的行数为 3 行)

热点排行