打印本文 打印本文 关闭窗口 关闭窗口
SQL Story(十一)--树状表游戏
作者:武汉SEO闵涛  文章来源:敏韬网  点击数4350  更新时间:2007/11/14 10:58:29  文章录入:mintao  责任编辑:mintao
GIN

       --以当前节点的子节点作为记录集建立游标

       DECLARE ChildNodes CURSOR

       READ_ONLY

              FOR SELECT ID FROM TreeView WHERE PID = @NodeID

       DECLARE @ChildNode VARCHAR(40)

       OPEN ChildNodes

       FETCH NEXT FROM ChildNodes INTO @ChildNode

       WHILE (@@fetch_status <> -1)--判断记录集是否成功打开

       BEGIN

              IF (@@fetch_status <> -2)

              BEGIN

                     --递归调用

                     EXEC DeleteNode @ChildNode

              END

              FETCH NEXT FROM ChildNodes INTO @ChildNode

       END

       CLOSE ChildNodes

       DEALLOCATE ChildNodes

       --代码执行到这里,可以确定@NodeID不再有子节点,现在,我们删除它

       DELETE FROM TreeView WHERE ID = @NodeID

END;

当然,这是一种比较低效的设计,每一个将要删除的节点都要执行一次Delete,比较有效率的方法是多深入一层,操作当前节点的子节点。有兴趣的读者可以一试。

       查询:树状表的查询是最有趣的内容之一。当然仅仅查出某一个节点的信息没有太大的意思,我们希望的是得到从当前节点一直向下(通常是到最底层)的完整子树。这同样需要一个递归。让我们从一个归纳法游戏开始,事先,我们先在TreeView中插入以下数据:

ID

PID

DATA

----------

----------

----------

ROOT

ROOT

ROOT

N11

ROOT

上一页  [1] [2] [3] [4]  下一页

打印本文 打印本文 关闭窗口 关闭窗口