我用的是.NET 2005的C#语言编写的程序,想用TreeView控件实现在数据库中调用数据,实现一个树状的结构~数据库是SQL Server 2005,表中的数据为:
childid childnode parentid
1 A 0
2 B 1
3 C 1
4 D 2
5 E 3
6 F 3也就是除了A之外,B、C的父节点都是A,即让B、C的父节点(parentid)等于的是A的节点值(childid),然后依次类推。
我用的语句是:
string selectCmd = select childid from 表 where parentid = '" + childid + "'";
但是不能实现循环调用,谁能帮我完成这个程序啊~
childid childnode parentid
1 A 0
2 B 1
3 C 1
4 D 2
5 E 3
6 F 3也就是除了A之外,B、C的父节点都是A,即让B、C的父节点(parentid)等于的是A的节点值(childid),然后依次类推。
我用的语句是:
string selectCmd = select childid from 表 where parentid = '" + childid + "'";
但是不能实现循环调用,谁能帮我完成这个程序啊~
CREATE PROCEDURE dbo.GetAllChildID
@ParentID INT
AS
IF @ParentID IS NULL RETURN
DECLARE @OldRecordCnt INT
DECLARE @CurRecordCnt INT
DECLARE @tmp Table([ID] INT PRIMARY KEY NOT NULL)
INSERT INTO @tmp VALUES(@ParentID)
SET @OldRecordCnt=1
WHILE 1=1
BEGIN
INSERT INTO @tmp SELECT a.[ChildID] FROM TableName a INNER JOIN @tmp b ON a.[ParentID]=b.[ID]
WHERE a.[ChildID] NOT IN (SELECT [ID] FROM @tmp)
SELECT @CurRecordCnt=COUNT(*) FROM @tmp
IF @CurRecordCnt=@OldRecordCnt
BREAK
ELSE
SET @OldRecordCnt=@CurRecordCnt
END
DELETE FROM @tmp WHERE [ID]=@ParentID
SELECT a.* FROM TableName a INNER JOIN @tmp b ON a.ChildID=b.[ID]
GO
现在可以实现的只有一次循环,即只能表示第一层树的结构,再往下就不循环了,想知道怎么样能实现这样的递归调用?