邹老大的《开发与管理应用实例》8.2.5,要插入的节点为什么会有子节点呢
使终没弄明白,校验一个新插入的节点是否会造成循环,要检索该节点的子节点,看有没有等于该节点的父节点的节点。但新增的节点,怎么会有子节点呢,并且节点的编码应该都唯一呀。 
   附源代码: 
   --测试数据 
 CREATE   TABLE   tb(ID   char(3),PID   char(3),Name   nvarchar(10)) 
 INSERT   tb   SELECT    '001 ',NULL   , '山东省 ' 
 UNION   ALL   SELECT    '002 ', '001 ', '烟台市 ' 
 UNION   ALL   SELECT    '004 ', '002 ', '招远市 ' 
 UNION   ALL   SELECT    '003 ', '001 ', '青岛市 ' 
 UNION   ALL   SELECT    '005 ',NULL   , '四会市 ' 
 UNION   ALL   SELECT    '006 ', '005 ', '清远市 ' 
 UNION   ALL   SELECT    '007 ', '006 ', '小分市 ' 
 GO 
 CREATE   FUNCTION   f_CheckCode( 
 @ID   char(3),      --要插入的节点编码 
 @PID   char(3)      --要插入的节点的上级编码 
 )RETURNS   bit 
 AS 
 BEGIN 
 	DECLARE   @t   TABLE(ID   char(3),Level   int,Flag   tinyint) 
 	DECLARE   @level   int 
 	SET   @level=0 
 	INSERT   @t   SELECT   ID,@level,CASE   WHEN   ID=@PID   THEN   1   ELSE   0   END 
 	FROM   tb 
 	WHERE   PID=@ID 
 	WHILE   @@ROWCOUNT> 0    
 		AND   NOT   EXISTS(SELECT   *   FROM   @t   WHERE   Flag=1) 
 	BEGIN 
 		SET   @level=@level+1 
 		INSERT   @t   SELECT   ID,@level,CASE   WHEN   ID=@PID   THEN   1   ELSE   0   END 
 		FROM   tb   a,@t   b 
 		WHERE   a.PID=b.ID 
 			AND   b.Level=@level-1 
 	END 
 	RETURN((SELECT   MAX(Flag)   FROM   @t)) 
 END 
------解决方案--------------------SELECT ID,@level,CASE WHEN ID=@PID THEN 1 ELSE 0 END 
 			FROM tb a,@t b 
 			WHERE a.PID=b.ID 
 			AND b.Level=@level-1 
 这一段有点问题? 
 ID列没有指定表名`````