<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      不后悔的blog

      心如止水

      博客園 首頁 新隨筆 聯(lián)系 訂閱 管理
      ===================================================
      表結構:
      表名:Tb_Column
      表結構(所有字段非空):
      Column_ID     int 主鍵(注:非標識)
      Column_Name   nvarchar(50)分類名稱
      Parent_ID     int 父分類ID(默認值0)
      Column_Path   nvarchar(1000) 分類路徑
      Column_Depth  int分類深度(默認值0)
      Column_Order  int排序(默認值0)
      Column_Intro  nvarchar(1000)分類說明

      ================================================
      存儲過程一:新建分類

      CREATE PROCEDURE sp_Column_Insert
      (
      @Parent_ID int,
      @Column_Name nvarchar(50),
      @Column_Intro nvarchar(1000)
      )
      AS
      Declare @Err As int
      Set @Err=0

      Begin Tran
      --通過現(xiàn)有記錄獲取欄目ID
      Declare @Column_ID As int
      Declare @Column_Depth As int
      Select @Column_ID = Max(Column_ID) From Tb_Column
      IF @Column_ID Is Not Null
      Set @Column_ID = @Column_ID+1
      Else
      Set @Column_ID = 1

      --判斷是否是頂級欄目,設置其Column_Path和Column_Order
      Declare @Column_Path As nvarchar(1000)
      Declare @Column_Order As int
      IF @Parent_ID = 0
      Begin
      Set @Column_Path =Ltrim(Str(@Column_ID))
      Select @Column_Order = Max(Column_Order) From Tb_Column
      IF @Column_Order Is Not Null
      Set @Column_Order = @Column_Order + 1
      Else --如果沒有查詢到記錄,說明這是第一條記錄
      Set @Column_Order = 1

      --深度
      Set @Column_Depth = 1
      End
      Else
      Begin
      --獲取父節(jié)點的路徑和深度
      Select @Column_Path = Column_Path ,@Column_Depth = Column_Depth From Tb_Column Where

      Column_ID=@Parent_ID
      IF @Column_Path Is Null
      Begin
      Set @Err = 1
      Goto theEnd
      End

      --獲取同父節(jié)點下的最大序號
      Select @Column_Order = Max(Column_Order) From Tb_PicColumn Where Column_Path like

      ''+@Column_Path+'|%'  Or Column_ID = @Parent_ID
      IF @Column_Order Is Not Null --如果序號存在,那么將該序號后的所有序號都加1
      Begin
      --更新當前要插入節(jié)點后所有節(jié)點的序號
      Update Tb_Column Set Column_Order = Column_Order +1 Where Column_Order

      >@Column_Order
      --同父節(jié)點下的最大序號加上1,構成自己的序號
      Set @Column_Order = @Column_Order + 1
      End
      Else
      Begin
      Set @Err=1
      Goto theEnd
      End

      --父節(jié)點的路徑加上自己的ID號,構成自己的路徑
      Set @Column_Path = @Column_Path + '|' + Ltrim(Str(@Column_ID))

      --深度
      Set @Column_Depth = @Column_Depth+1

      End

      Insert Into Tb_Column(Column_ID,Column_Name,Parent_ID,Column_Path,Column_Depth,Column_Order,Column_Intro)

      Values(@Column_ID,@Column_Name,@Parent_ID,@Column_Path,@Column_Depth,@Column_Order,@Column_Intro)

      IF @@Error<>0
      Begin
      Set @Err=1
      Goto theEnd
      End

      --更新當前記錄之后的記錄的ORDER
      --Update Tb_Column Set Column_Order = Column_Order+1 Where Column_Order  > @Column_Order

      theEnd:
      IF @Err=0
      Begin
      Commit Tran
      Return @Column_ID
      End
      Else
      Begin
          Rollback Tran
      Return 0
      End
      GO

      ===================================================
      存儲過程二:刪除分類
      CREATE PROCEDURE sp_Column_Delete
      (
      @Column_ID int
      )
      AS
      Declare @Err As int
      Set @Err = 0
      Begin Tran
      --首先查詢該節(jié)點下是否有子節(jié)點
      Select Column_ID From Tb_Column Where Parent_ID = @Column_ID
      IF @@RowCount<>0
          Begin
          Set @Err = 1
          Goto theEnd
          End

      --獲取該節(jié)點的Column_Order,為了刪除后整理其他記錄的順序
      Declare @Column_Order As int
      Select @Column_Order = Column_Order From Tb_Column Where Column_ID = @Column_ID
      IF @Column_Order Is NUll
          Begin
            Set @Err =2
            Goto theEnd
          End

      --更新其他記錄的Column_Order
      Update Tb_Column Set Column_Order = Column_Order -1 Where Column_Order >@Column_Order
      IF @@Error<>0
          Begin
            Set @Err =3
            Goto theEnd
          End

      --刪除操作
      Delete From Tb_Column Where Column_ID=@Column_ID
      IF @@Error<>0
          Begin
            Set @Err =4
            Goto theEnd
        End

      --更新其他記錄的Column_ID
      --Update Tb_Column Set Column_ID= Column_ID - 1 Where Column_ID >@Column_ID
      --IF @@Error<>0
      --    Begin
      --      Set @Err =5
      --      Goto theEnd
      --    End

      theEnd:
      IF @Err = 0
          Begin
            Commit Tran
            Return 0 --刪除成功
          End
      Else
          Begin
            IF @Err=1
        Begin
            Rollback Tran
            Return 1 --有子節(jié)點
      End
            Else
      Begin
            Rollback Tran
            Return 2--未知錯誤
      End
          End
      GO
      =============================================
      存儲過程三:編輯分類
      CREATE PROCEDURE sp_Column_Update
      (
      @Column_ID int,
      @Parent_ID int,
      @Column_Name nvarchar(50),
      @Column_Intro nvarchar(1000)
      )
      AS
      Declare @Err As int
      Set @Err=0

      Begin Tran

      --獲取修改前的:Parent_ID,Column_Depth,Column_Order
      Declare @oParent_ID As int
      Declare @oColumn_Depth As int
      Declare @oColumn_Order As int
      Declare @oColumn_Path As nvarchar(1000)

      Select @oParent_ID = Parent_ID, @oColumn_Depth = Column_Depth,@oColumn_Order = Column_Order, @oColumn_Path = Column_Path  From Tb_Column Where Column_ID = @Column_ID
      IF @oParent_ID Is Null
          Begin
          Set @Err = 1
          Goto theEnd
          End

      --如果父ID沒有改變,則直接修改欄目名和欄目簡介
      IF @oParent_ID = @Parent_ID
          Begin
          Update Tb_Column Set Column_Name = @Column_Name,Column_Intro = @Column_Intro Where Column_ID = @Column_ID
          IF @@Error <> 0
          Set @Err = 2
          Goto theEnd
          End


      Declare @nColumn_Path As nvarchar(1000)
      Declare @nColumn_Depth As int
      Declare @nColumn_Order As int

      --獲取當前節(jié)點作為父節(jié)點所包含的節(jié)點數(shù)[包括自身] 注:如果返回 “1” 說明是單節(jié)點
      Declare @theCount As int
      Select @theCount = Count(Column_ID) From Tb_Column Where Column_ID=@Column_ID Or Column_Path like ''+@oColumn_Path+'|%'
      IF @theCount Is Null
      Begin
          Set @Err = 3
          Goto theEnd
      End

      IF @Parent_ID=0 --如果是設置為頂級節(jié)點,將節(jié)點設置為最后一個頂級節(jié)點
      Begin
      --Print '設置為頂級欄目'
      Set @nColumn_Path = Ltrim(Str(@Column_ID))
      Set @nColumn_Depth =1

      Select @nColumn_Order = Max(Column_Order) From Tb_Column
      IF @nColumn_Order Is NULL
                        Begin
           Set @Err = 4
           Goto theEnd
           End

      Set @nColumn_Order = @nColumn_Order - @theCount + 1

      --更新三部分 1 節(jié)點本身 2 所有子節(jié)點 2 本樹更改之前的后面記錄的順序
      --Print '更新本欄目之前位置后面的所有欄目[不包括本欄目下的子欄目]的:Column_Order'
      Update Tb_Column Set Column_Order = Column_Order-@theCount Where (Column_Order >@oColumn_Order) And (Column_Path Not like ''+@oColumn_Path+'|%')
      IF @@Error <> 0
          Begin
          Set @Err = 7
          Goto theEnd
          End

      --Print '更新本欄目的:Parent_ID,Column_Path,Column_Depth,Column_Order,Column_Name,Column_Intro'
      Print 'Order : '+Ltrim(Str(@nColumn_Order))
      Update Tb_Column Set Parent_ID=@Parent_ID,Column_Path = @nColumn_Path,Column_Depth = @nColumn_Depth,Column_Order = @nColumn_Order, Column_Name = @Column_Name,Column_Intro = @Column_Intro Where Column_ID = @Column_ID
      IF @@Error <> 0
          Begin
          Set @Err = 5
          Goto theEnd
          End

      --Print '更新本欄目下的所有子欄目的:Column_Path,Column_Depth,Column_Order'
                   Update Tb_Column Set Column_Path = Replace(Column_Path,@oColumn_Path,@nColumn_Path),Column_Depth = Column_Depth + (@nColumn_Depth-@oColumn_Depth),Column_Order = Column_Order+( @nColumn_Order-@oColumn_Order) Where Column_Path like ''+@oColumn_Path+'|%'
      IF @@Error <> 0
          Begin
          Set @Err = 6
          Goto theEnd
          End


      End
      Else
      Begin
      --獲取未來父節(jié)點的相關信息,并設置本節(jié)點的相關值
      Select @nColumn_Depth = Column_Depth,@nColumn_Path = Column_Path From Tb_Column Where Column_ID = @Parent_ID
      IF @nColumn_Depth Is  NULL Or @nColumn_Path Is Null
            Begin
            Set @Err = 8
            Goto theEnd
            End
      Set @nColumn_Depth = @nColumn_Depth +1
      Select @nColumn_Order =Max(Column_Order) From Tb_Column Where Column_ID = @Parent_ID Or  Column_Path like ''+@nColumn_Path+'|%'
      IF @nColumn_Order Is  NULL
            Begin
            Set @Err = 9
            Goto theEnd
            End

      Set @nColumn_Path = @nColumn_Path +'|'+ Ltrim(Str(@Column_ID))

      IF @nColumn_Order = @oColumn_Order+1 --如果新的父節(jié)點是原來位置上端最近一個兄弟,則所有節(jié)點的順序都不改變
                          Begin
      Update Tb_Column Set Parent_ID=@Parent_ID,Column_Path = @nColumn_Path,Column_Depth = @nColumn_Depth, Column_Name = @Column_Name,Column_Intro = @Column_Intro Where Column_ID = @Column_ID
      IF @@Error <> 0
          Begin
          Set @Err = 10
          Goto theEnd
          End
             End

      Set  @nColumn_Order = @nColumn_Order + 1

      --更新三部分 1 本樹更改之前的后面(或前面)記錄的順序 1 節(jié)點本身  3 所有子節(jié)點
      --分為向上移或象下移
      --Print '更新本欄目之前位置后面的所有欄目[或者本欄目之后位置]  [不包括本欄目下的子欄目]的:Column_Order'
      IF @nColumn_Order < @oColumn_Order
      Begin
      Update Tb_Column Set Column_Order = Column_Order+@theCount Where Column_Order<@oColumn_Order  And Column_Order >=@nColumn_Order And (Column_Path Not like ''+@oColumn_Path+'|%') And Column_ID<>@Column_ID
      IF @@Error <> 0
              Begin
              Set @Err = 12
              Goto theEnd
              End
      End
      Else
      Begin
      Update Tb_Column Set Column_Order = Column_Order-@theCount Where Column_Order >@oColumn_Order And Column_Order<@nColumn_Order  And (Column_Path Not like ''+@oColumn_Path+'|%') And Column_ID<>@Column_ID
      IF @@Error <> 0
              Begin
              Set @Err = 13
              Goto theEnd
              End
      End

      --Print '更新本欄目的:Parent_ID,Column_Path,Column_Depth,Column_Order,Column_Name,Column_Intro'
      Print 'Order : '+Ltrim(Str(@nColumn_Order))
      IF @nColumn_Order > @oColumn_Order
      Set @nColumn_Order = @nColumn_Order - @theCount
      Update Tb_Column Set Parent_ID=@Parent_ID,Column_Path = @nColumn_Path,Column_Depth = @nColumn_Depth,Column_Order = @nColumn_Order, Column_Name = @Column_Name,Column_Intro = @Column_Intro Where Column_ID = @Column_ID
      IF @@Error <> 0
          Begin
          Set @Err = 10
          Goto theEnd
          End

      --Print '更新本欄目下的所有子欄目的:Column_Paht,Column_Depth,Column_Order'
                   Update Tb_Column Set Column_Path = Replace(Column_Path,@oColumn_Path,@nColumn_Path),Column_Depth = Column_Depth + (@nColumn_Depth-@oColumn_Depth),Column_Order = Column_Order+(@nColumn_Order-@oColumn_Order) Where Column_Path like ''+@oColumn_Path+'|%'
      IF @@Error <> 0
          Begin
          Set @Err = 11
          Goto theEnd
          End
      End

      theEnd:
      IF @Err<>0 --如果有錯誤則返回錯誤號
         Begin
         Rollback Tran
         Return @Err
         End
      Else     --如果沒有錯誤就返回0
         Begin
         Commit Tran
         Return 0
         End
      GO
      =========================================
      存儲過程四:顯示分類(只是一條select語句)
      分類列表:
      CREATE PROCEDURE sp_Column_List
       AS
      SELECT Column_ID, Column_Name, Parent_ID, Column_Path, Column_Depth,
            Column_Order, Column_Intro
      FROM Tb_Column
      ORDER BY Column_Order
      GO

      posted on 2007-12-03 11:07  不后悔  閱讀(461)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 兴仁县| 2019亚洲午夜无码天堂| 日韩精品18禁一区二区| 成人午夜在线播放| 最近中文字幕完整版2019| 亚洲无线看天堂av| 精品国产乱弄九九99久久| 精品一区二区亚洲国产| 国产三级精品福利久久| 日韩中文字幕有码午夜美女| 亚洲国产精品久久电影欧美 | 亚洲高清免费在线观看| 青草99在线免费观看| 午夜DY888国产精品影院| 久久久久久亚洲精品成人| 亚洲天堂男人的天堂在线| 精品久久久久久久中文字幕| 国产成人8X人网站视频| 亚洲综合色成在线播放| 日本精品aⅴ一区二区三区| 亚洲国产综合一区二区精品 | 91久久偷偷做嫩草影院免费看| 人妻精品久久无码区| 国产精品亚洲А∨怡红院| 宁阳县| 亚洲中文字幕精品无人区| 国产乱码1卡二卡3卡四卡5 | 日韩精品一区二区三免费| 日韩精品卡1卡2日韩在线| 精品人妻伦九区久久aaa片| 国产精品免费中文字幕| 色欲综合久久中文字幕网| 日本欧美一区二区免费视频| 精品人妻日韩中文字幕| 美女又黄又免费的视频| 欧洲极品少妇| 国产精品久久蜜臀av| 国产伦精品一区二区三区| 免费看黄片一区二区三区| 欧美老少配性行为| 色偷偷亚洲精品一区二区|