<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 3, 文章 - 152, 評論 - 17, 引用 - 0
    數據加載中……

    一問一答:存儲過程經典問題

    只涉及到一個表:xkb_treeNode

    表結構是這樣:
    node_id          int      //節點id
    parentNode_id    int      //父節點id
    node_text        varchar  //節點內容
    isModule         bit      //是否葉子節點

    現在保存的數據有:

    node_id  parentNode_id  node_text        isModule
       1        -1          語言與文學           0
       2        -1            數學               0
       3        -1            技術               0
       4         1            語文               0
       5         1            外語               0
       6         5            英語               0
       7         6          初中英語             0
       8         7           特斯塔              1
       9         4           測定是2             1
       10        2            測試3              1


    現在問題是:
    能否通過做一個存儲過程,
    根據表中的isModule字段的取值(取值為1的表示最終葉子結點),
    比如“特斯塔”為葉子節點,層層向上遞進找到”特斯塔“的祖先節點:
    特斯塔-〉初中英語-〉英語-〉外語-〉語言與文學
    即通過”特斯塔“找到”語言與文學“來

    最終返回的形態為:
    葉子節點id  父節點id      節點名稱      祖先節點名稱  祖先節點id
       8           7           特斯塔        語言與文學       1
       9           4           測定是2       語言與文學       1
       10          2           測試3           數學           2

     

    /////////////////////////////////////////////////////////////////////////
    正確答案:

     --生成測試數據
    create table xkb_treeNode(
    node_id        int,
    parentNode_id   int,
    node_textvarchar(10),
    isModulebit)


    insert into xkb_treeNode select 1  ,-1,'語言與文學',0
    insert into xkb_treeNode select 2  ,-1,'數學',0
    insert into xkb_treeNode select 3  ,-1,'技術',0
    insert into xkb_treeNode select 4  , 1,'語文',0
    insert into xkb_treeNode select 5  , 1,'外語',0
    insert into xkb_treeNode select 6  , 5,'英語',0
    insert into xkb_treeNode select 7  , 6,'初中英語',0
    insert into xkb_treeNode select 8  , 7,'特斯塔'        ,1
    insert into xkb_treeNode select 9  , 4,'測定是2',1
    insert into xkb_treeNode select 10 , 2,'測試3',1


    --創建存儲過程
    create procedure sp_test
    as
    begin
       select
           a.node_id,
           a.parentNode_id,
           a.node_text,
           b.node_id   as ancestor_id  ,
           b.node_text as ancestor_text     
       into
           #t
       from
           xkb_treeNode a,xkb_treeNode b
       where
           a.parentNode_id = b.node_id and a.isModule = 1 
      
       while(exists(select 1 from xkb_treeNode a,#t b where a.node_id=ancestor_id and a.parentNode_id != -1))
       begin
           update #t
           set
               ancestor_id   = b.p_id,
               ancestor_text = b.p_text
           from
               #t a,
               (select
                   c.node_id,
                   d.node_id as p_id,
                   d.node_text as p_text
                from
                   xkb_treeNode c,xkb_treeNode d
                where
                   c.parentNode_id = d.node_id) b
           where
               a.ancestor_id = b.node_id
       end
      
       select * from #t order by node_id
    end


    --執行存儲過程,結果樓主自己看
    exec sp_test

    posted on 2005-02-28 21:30 閱讀(156) 評論(0)  編輯  收藏 所屬分類: 數據庫相關

    主站蜘蛛池模板: 二个人看的www免费视频| 久久国产免费观看精品3| 免费一区二区无码东京热| 国产精品自在自线免费观看| 亚洲欧美日韩国产成人| 毛片a级毛片免费观看免下载| 国产自偷亚洲精品页65页| 亚洲人成网站在线观看播放动漫 | 亚洲小视频在线播放| 黄色毛片免费网站| 色se01短视频永久免费| 国产偷国产偷亚洲高清日韩| 一区二区三区视频免费观看| 自拍偷自拍亚洲精品被多人伦好爽 | 亚洲日韩中文字幕天堂不卡| 中文毛片无遮挡高潮免费| 亚洲一区二区三区无码中文字幕| sss日本免费完整版在线观看| 国产偷国产偷亚洲高清日韩| 日本高清高色视频免费| 亚洲第一页在线观看| 永久免费不卡在线观看黄网站 | 亚洲免费在线视频播放| 久久久久国色AV免费观看性色| 亚洲日韩国产二区无码| 亚洲人成网站观看在线播放| a毛片免费在线观看| 亚洲免费视频一区二区三区| 国产午夜不卡AV免费| 亚洲卡一卡2卡三卡4麻豆| 国产高清在线精品免费软件| 国产裸体美女永久免费无遮挡| 国产公开免费人成视频| 亚洲成a人片在线不卡一二三区 | 国产精品成人啪精品视频免费 | 日本亚洲色大成网站www久久| 亚欧在线精品免费观看一区| 久久精品国产亚洲77777| 91香蕉国产线观看免费全集| 亚洲一卡一卡二新区无人区| 四虎影视大全免费入口|