日期:2014-05-18  浏览次数:20413 次

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 行)