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

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

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

    posts - 495,comments - 227,trackbacks - 0

    本存儲過程實現了多級分類檔案 級聯刪除技術

    本存儲過程的特點是 :

    n ????????? 可以在不同的數據庫表上應用此存儲過程 , 達到通用化

    n ????????? 同時用戶也可以根據不同的表結構 , 選擇相應版本的的存儲過程 , 在這里共有三個版本可供用戶選擇 , 分別對應表結構中有無節點的深度字段等情況

    進行調用本存儲過程時只需要傳遞節點號及表名即可 , 但是用戶選擇相應版本進行應用時 , 需要針對實際情況作出選擇

    版本一

    CREATE procedure prcDelete(@vSourceID varchar(30),@Table varchar(20), @iOK int output)

    as

    declare @iDepth int

    declare @SQLString nvarchar(500)

    set @SQLString=N'select vID from '+@Table +' where vID = '''+ltrim(rtrim(@vSourceID))+''''

    exec(@SQLString)

    if @@rowcount > 0

    begin

    ?? ?? set @SQLString=N'select @iDepth=iDepth from '+@table+ ' where vID = '''+ltrim(rtrim(@vSourceID))+''''

    ???????? exec sp_executesql @SQLString,N'@iDepth int output',@iDepth output

    ???????? select @vSourceID as vID,@iDepth as iDepth into #t

    ???????? set @SQLString=N'insert #t select vID,iDepth from '+@Table +' where vParentID in (select vID from #t where iDepth=@iDepth-1)'

    ???????? while @@rowcount > 0

    ???????? begin

    ?????????????????? set @iDepth=@iDepth+1

    ??????? ?? exec sp_executesql @SQLString,N'@iDepth int',@iDepth

    ???????? end

    ???????? set @SQLString=N'delete from '+@Table +' where vID in (select vID from #t) '

    ???????? begin tran

    ???????? exec sp_executesql @SQLString

    ???????? if @@error<>0 goto Err

    ???????? commit

    ???????? select @iOK=0

    ???????? return

    ???????? Err:

    ???????? ?? rollback

    ???????? ?? select @iOK=1

    end

    else

    begin

    ???????? select @iOK=1

    end

    ?

    版本二

    CREATE procedure prcDelete(@vSourceID varchar(30),@Table varchar(20), @iOK int output)

    as

    declare @level int

    declare @SQLString nvarchar(500)

    set @SQLString=N'select vID from '+@Table +' where vID = '''+ltrim(rtrim(@vSourceID))+''''

    exec(@SQLString)

    if @@rowcount > 0

    begin

    ???????? set @level=0

    ???????? select @vSourceID as vID,@level as level into #t

    ???????? set @SQLString=N'insert #t select vID,@level from '+@Table +' where vParentID in (select vID from #t where level=@level-1) '

    ???????? while @@rowcount > 0

    ???????? begin

    ?????????????????? set @level=@level+1

    ??????? ?? exec sp_executesql @SQLString,N'@level int',@level

    ???????? end

    ???????? set @SQLString=N'delete from '+@Table +' where vID in (select vID from #t) '

    ???????? begin tran

    ???????? exec sp_executesql @SQLString

    ???????? if @@error<>0 goto Err

    ???????? commit

    ???????? select @iOK=0

    ???????? return

    ???????? Err:

    ???????? ? ? rollback

    ???????? ?? select @iOK=1

    end

    else

    begin

    ???????? select @iOK=1

    end

    ?

    版本三

    CREATE procedure prcDelete(@vSourceID varchar(30),@Table varchar(20), @iOK int output)

    as

    declare @vParentID varchar(30)

    declare @SQLString nvarchar(500)

    set @SQLString=N'select vID from '+@Table +' where vID = '''+ltrim(rtrim(@vSourceID))+''''

    exec(@SQLString)

    if @@rowcount > 0

    begin

    ???????? select @vSourceID as vID,@vParentID as vParentID into #t

    ???????? set @SQLString=N'insert #t select vID,vParentID from '+@Table +' where vParentID in (select vID from #t) and vID not in(select vID from #t)'

    ???????? while @@rowcount > 0

    ??????? ?? exec(@SQLString)

    ???????? set @SQLString=N'delete from '+@Table +' where vID in (select vID from #t) '

    ???????? begin tran

    ???????? exec sp_executesql @SQLString

    ???????? if @@error<>0 goto Err

    ???????? commit

    ???????? select @iOK=0

    ???????? return

    ???????? Err:

    ???????? ?? rollback

    ???????? ?? select @iOK=1

    end

    else

    begin

    ???????? select @iOK=1

    end

    ?

    三種版本的比較

    版本一適合以下表結構

    create table CustomerClass(

    vID??? varchar(30) constraint pkCustomerClass primary key ,

    vCustomerClassName varchar(40) NOT NULL,

    vRemarks???????? varchar(80) NULL,

    vParentIDvarchar(30) NULL,

    iDepth?????? Int NOT NULL

    )

    版本二和版本三適合以下表結構

    create table CustomerClass(

    vID??? varchar(30) constraint pkCustomerClass primary key ,

    vCustomerClassName varchar(40) NOT NULL,

    vRemarks???????? varchar(80) NULL,

    vParentIDvarchar(30) NULL

    )

    另外用戶如果要在 SQL 查詢分析器進行測試時可用如下方法進行測試 ( 注意執行時三個語句一起執行 ) :

    declare @value int

    exec prcDelete '002','CustomerClass',@iOK=@value output

    select @value

    ?

    存儲過程說明

    n????????? 本存儲過程利用輸出參數來說明級聯刪除操作是否成功 , 返回 0 表示成功 ,1 表示失敗

    n????????? 本存儲過程利用事務來進行刪除 , 確保操作安全和數據的完整性 , 數據完整性在這里指的是 , 若某一檔案已經在外部引用過了 , 即其他表中的外關鍵字使用過了 , 則刪除本結點或是包含這一結點的結點 , 都會進行事務控制 , 返回 1, 說明不允許刪除

    n????????? 另外本存儲過程對傳入的結點進行審核 , 確定在本表中有這一結點時才進行接下來的刪除操作 , 否則返回 1, 說明結點不存在或傳入結點有誤

    Copyright 2003-2005 www.sohozu.com All Rights Reserved
    posted on 2006-09-12 13:32 SIMONE 閱讀(279) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 久久精品夜色国产亚洲av| 国产成人自产拍免费视频| 免费人成在线观看视频高潮| 亚洲精品天堂在线观看| 免费无码又爽又刺激高潮| 亚洲第一区二区快射影院| 亚洲午夜免费视频| 国产一卡2卡3卡4卡2021免费观看| 在线免费视频你懂的| 天天综合亚洲色在线精品| 亚洲国产一级在线观看| 四虎影视大全免费入口| 中文日本免费高清| 无忧传媒视频免费观看入口| 亚洲ⅴ国产v天堂a无码二区| 国产成人麻豆亚洲综合无码精品| 国产一卡二卡≡卡四卡免费乱码| 国产中文字幕在线免费观看| youjizz亚洲| 亚洲另类视频在线观看| 亚洲成人福利在线| 亚洲精品人成电影网| 久久亚洲国产精品成人AV秋霞 | 国产亚洲一区二区在线观看| 亚洲av无码天堂一区二区三区| A级毛片高清免费视频在线播放| 黄色免费网址在线观看| 偷自拍亚洲视频在线观看| 亚洲天堂一区二区| 久久久亚洲欧洲日产国码aⅴ| 免费人成视频x8x8入口| 18成禁人视频免费网站| 99久久精品国产免费| 8x8x华人永久免费视频| 日韩av无码久久精品免费| 一级毛片免费视频| 亚洲视频免费一区| 毛片A级毛片免费播放| 国产精品麻豆免费版| 青草草色A免费观看在线| 国产一卡2卡3卡4卡无卡免费视频 国产一卡二卡3卡四卡免费 |