| 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] 下一页 |