当前位置: 代码迷 >> Sql Server >> 邹老大的《开发与管理应用实例》8.2.5,要插入的节点为什么会有子节点呢解决方案
  详细解决方案

邹老大的《开发与管理应用实例》8.2.5,要插入的节点为什么会有子节点呢解决方案

热度:70   发布时间:2016-04-27 17:30:03.0
邹老大的《开发与管理应用实例》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   [email protected]   THEN   1   ELSE   0   END
FROM   tb
WHERE   [email protected]
WHILE   @@ROWCOUNT> 0  
AND   NOT   EXISTS(SELECT   *   FROM   @t   WHERE   Flag=1)
BEGIN
SET   @[email protected]+1
INSERT   @t   SELECT   ID,@level,CASE   WHEN   [email protected]   THEN   1   ELSE   0   END
FROM   tb   a,@t   b
WHERE   a.PID=b.ID
AND   [email protected]
END
RETURN((SELECT   MAX(Flag)   FROM   @t))
END


------解决方案--------------------
SELECT ID,@level,CASE WHEN [email protected] THEN 1 ELSE 0 END
FROM tb a,@t b
WHERE a.PID=b.ID
AND [email protected]
这一段有点问题?
ID列没有指定表名`````
  相关解决方案