午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > sqlserver另類非遞歸的無限級分類(存儲過程版)

sqlserver另類非遞歸的無限級分類(存儲過程版)

熱門標簽:臨沂智能電銷機器人加盟哪家好 一個導航軟件能用幾個地圖標注點 小e電話機器人 外呼運營商線路收費 貴州房產智能外呼系統供應商 鎮江網路外呼系統供應商 申請400電話在哪辦理流程 電銷外呼有錄音系統有哪些 百度地圖標注改顏色
下面是我統計的幾種方案:

第一種方案(遞歸式):

簡單的表結構為:
CategoryID int(4),
CategoryName nvarchar(50),
ParentID int(4),
Depth int(4)
這樣根據ParentID一級級的運用遞歸找他的上級目錄。
還有可以為了方便添加CategoryLeft,CategoryRight保存他的上級目錄或下級目錄

第二種方案:
設置一個varchar類型的CategoryPath字段來保存目錄的完整路徑,將父目錄id用符號分隔開來。比如:1,5,8,10

第三種方案:
每級分類遞增兩位數字的方法
示例:
一級分類:01,02,03,04...
二級分類:0101,0102,0103,0104...
三級分類:010101,010102,010103...

分析一下,其實第三種方案并不能真正意義上做無限級的分類,而第二種方案,雖然比較容易得到各上級及下級的分類信息。但,添加和轉移分類的時候操作將很麻煩。
而且,也完全違反了數據庫設計范式。

其實我也一直在用第二種方案的。為了查找方便,我有時都在新聞表里加上CategoryID和CategoryPath

而我今天要說的算法其實是第二種方案的改進版,一般做分類都是使用一個表格來保存分類信息。
而我這里,要新建兩個表格,一個表格是保存分類信息表,一個保存分類關系表。

表結構如下:
表1:tomi_Category
CategoryID int(4), '編號
CategoryName nvarchar(50), '分類名稱
Depth int(4), '深度
表2:tomi_CategoryBind
CategoryID int(4),
BindCategoryID int(4),
Depth int(4),

添加,編輯,刪除操作有點麻煩。。我是直接用存儲過程的。。不知道大家能看得懂不。。哈哈。
1、添加分類(Category_Add)
復制代碼 代碼如下:

CREATE proc [dbo].[Category_Add]
@CategoryName nvarchar(50),
@BindCategoryID int,
@CategoryID int output
as
declare @Success bit
set @Success=1

--生成不重復的CategoryID
declare @i bit
set @i=0
while @i=0
begin
set @CategoryID=LEFT(10000000 + CONVERT(bigint, ABS(CHECKSUM(NEWID()))), 8)
if(not exists(select CategoryID from tomi_Category where CategoryID=@CategoryID))
set @i=1
end


--得到depth
declare @depth int
set @depth=0
select @depth=depth from tomi_Category where CategoryID=@BindCategoryID
set @depth=@depth+1

--插入
BEGIN TRAN
insert into tomi_Category(categoryID,CategoryName,Depth) values(@CategoryID,@CategoryName,@Depth)
if(@@ERROR>0)
BEGIN
ROLLBACK TRAN
set @Success=0
END

insert into tomi_CategoryBind(CategoryID,BindCategoryID,Depth) values(@CategoryID,@CategoryID,@Depth)
if(@@ERROR>0)
BEGIN
ROLLBACK TRAN
set @Success=0
END

insert into tomi_CategoryBind(CategoryID,BindCategoryID,Depth) select @CategoryID,BindCategoryID,Depth from tomi_CategoryBind where CategoryID=@BindCategoryID
if(@@ERROR>0)
BEGIN
ROLLBACK TRAN
set @Success=0
END
COMMIT TRAN

print @CategoryID

每個分類在tomi_CategoryBind有完整的目錄結構。。一個分類在tomi_CategoryBind的記錄數等于他在tomi_Category的depth值。

圖片:

2、編輯修改分類(Category_Edit)
復制代碼 代碼如下:

CREATE proc [dbo].[Category_Edit]
@CategoryID int,
@CategoryName nvarchar(50),
@BindCategoryID int
as
--更新
BEGIN TRAN
update tomi_Category set CategoryName=@CategoryName where CategoryID=@CategoryID
IF @@ERROR>0
BEGIN
ROLLBACK TRAN
return 0
END
COMMIT TRAN
--檢測是否更改了上級目錄
declare @is bit
set @is=0
if(exists(select CategoryID from tomi_CategoryBind where CategoryID=@CategoryID and BindCategoryID=@BindCategoryID and Depth=(select Depth-1 from tomi_Category where CategoryID=@CategoryID)))
set @is=1
print @is
--更改了深度
if(@is=0)
BEGIN
--得到上級目錄的depth
declare @depth int
set @depth=0
select @depth=depth from tomi_Category where CategoryID=@BindCategoryID
set @depth=@depth+1
--print @depth
--更改子目錄
declare @i int
declare @sCategoryID int
declare @sBindCategoryID int
declare @tCategoryIDList Table
(
CategoryID int,
FlagID tinyint
)
insert @tCategoryIDList select c.CategoryID,0 from tomi_Category c left join tomi_CategoryBind b on c.CategoryID=b.CategoryID where b.BindCategoryID=@CategoryID order by c.Depth
set @i=1
set @sBindCategoryID=@BindCategoryID
declare @errs int
set @errs=0
BEGIN TRAN
while(@i>=1)
BEGIN
select @sCategoryID=0
select Top 1 @sCategoryID=CategoryID from @tCategoryIDList where FlagID=0
set @i=@@RowCount
--print @sCategoryID
if @sCategoryID>0
BEGIN
--刪除,更新
delete from tomi_CategoryBind where CategoryID=@sCategoryID
set @errs=@errs+@@error
update tomi_Category set depth=@depth where CategoryID=@sCategoryID
set @errs=@errs+@@error
--插入
insert into tomi_CategoryBind(CategoryID,BindCategoryID,Depth) values(@sCategoryID,@sCategoryID,@Depth)
set @errs=@errs+@@error
insert into tomi_CategoryBind(CategoryID,BindCategoryID,Depth) select @sCategoryID,BindCategoryID,Depth from tomi_CategoryBind where CategoryID=@sBindCategoryID
set @errs=@errs+@@error
set @sBindCategoryID=@sCategoryID
set @Depth=@Depth+1
--print @sCategoryID
--print @sBindCategoryID
--print @Depth
--print '--'
END
update @tCategoryIDList set FlagID=1 where CategoryID=@sCategoryID
END
if(@errs>0)
BEGIN
ROLLBACK TRAN
return 0
END
else
COMMIT TRAN
END


3、刪除分類(Category_Del) 會直接刪除子分類
復制代碼 代碼如下:

create proc Category_Del
@CategoryID int
as
BEGIN TRAN
delete from tomi_Category where CategoryID in (select CategoryID from tomi_CategoryBind where CategoryID=@CategoryID or BindCategoryID=@CategoryID)
if(@@ERROR>0)
BEGIN
ROLLBACK TRAN
return 0
END
delete from tomi_CategoryBind where CategoryID in (select CategoryID from tomi_CategoryBind where CategoryID=@CategoryID or BindCategoryID=@CategoryID)
if(@@ERROR>0)
BEGIN
ROLLBACK TRAN
return 0
END
COMMIT TRAN

4、分類列表,顯示分類(Category_List)

復制代碼 代碼如下:

CREATE proc Category_List
as
select c.* from tomi_Category c left join tomi_CategoryBind b on c.CategoryID=b.CategoryID where b.Depth=1 order by b.BindCategoryID,c.Depth

GO

exec Category_List 可以直接讓分類等級查詢出來。而且顯示全部的話,一次查詢即可,只需判斷depth就行。
圖片:

5、上級子分類列表 (Category_upTree)
復制代碼 代碼如下:

Create Proc Category_UpTree
@CategoryID int
as
select c.* from tomi_Category c left join tomi_CategoryBind b on c.CategoryID=b.BindCategoryID where b.CategoryID=@CategoryID order by c.Depth
GO

exec Category_UpTree 63919523 這樣就可以得到一個分類的完整子目錄集,方便吧,只要一條sql.
圖片:

6、下級子分類列表(Category_downTree)
復制代碼 代碼如下:

Create Proc Category_DownTree
@CategoryID int
as
select c.* from tomi_Category c left join tomi_CategoryBind b on c.CategoryID=b.CategoryID where b.BindCategoryID=@CategoryID order by c.Depth
GO

exec Category_DownTree 21779652 這樣可以得到一個分類完整下級目錄。比如得到某個分類和其分類的子分類下的所有產品用這個就好。。方便,一條sql.
圖片:

以上是初稿,只是隨意的測試了幾次。。。有錯誤的,還請大家指出。。

呵呵。轉載請注明鏈接,博客園首發,多謝。
作者:TomiWong
時間:2010.07.18
您可能感興趣的文章:
  • 使用SqlServer CTE遞歸查詢處理樹、圖和層次結構
  • 在sqlserver中如何使用CTE解決復雜查詢問題
  • SQLSERVER2008中CTE的Split與CLR的性能比較
  • 使用SQLSERVER 2005/2008 遞歸CTE查詢樹型結構的方法
  • SQLSERVER2005 中樹形數據的遞歸查詢
  • SqlServer使用公用表表達式(CTE)實現無限級樹形構建

標簽:合肥 澳門 日照 嘉興 三明 保定 延邊 晉城

巨人網絡通訊聲明:本文標題《sqlserver另類非遞歸的無限級分類(存儲過程版)》,本文關鍵詞  sqlserver,另類,非,遞歸,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《sqlserver另類非遞歸的無限級分類(存儲過程版)》相關的同類信息!
  • 本頁收集關于sqlserver另類非遞歸的無限級分類(存儲過程版)的相關信息資訊供網民參考!
  • 推薦文章
    91亚洲精品久久久蜜桃网站| 日本一区二区三区四区在线视频 | 国产经典欧美精品| 亚洲xxxxx电影| 国产又大又粗又长| 午夜精品久久久久久久久久久久久 | www.com亚洲| 欧美丰满老妇厨房牲生活| 手机在线免费看毛片| 亚洲美女激情视频| 日本一级黄色录像| 久久国产精品久久久久久| 亚洲欧美在线视频免费| 午夜精品久久久99热福利| 国产日韩在线观看一区| 午夜精品久久久99热福利| 日本成人动漫在线观看| 国内精品**久久毛片app| 国产精品一区二区免费不卡 | 国产偷拍一区二区| 亚洲最大福利网| 99国产精品免费| 日韩一区国产二区欧美三区| 黄色在线观看免费| 最近中文字幕2019免费| 亚洲欧美另类日韩| 亚洲一区二区三区xxx视频| 精品一区二区三区日韩| av磁力番号网| 欧美韩国一区二区| www激情五月| 日韩黄色av网站| 免费看日韩毛片| 成人久久一区二区| 国产三级三级三级精品8ⅰ区| 欧美资源在线观看| 成人国产精品视频| 国产wwwxx| 5月丁香婷婷综合| 国产一级av毛片| 国产91精品不卡视频| 国产.欧美.日韩| 精品国产鲁一鲁一区二区三区| 欧美一区二区黄| 精品午夜福利视频| 奇门遁甲1982国语版免费观看高清 | yjizz视频| 日韩av综合网| 不卡av中文字幕| 毛片av在线播放| 亚洲成人自拍一区| 欧美一级特黄高清视频| 8090成年在线看片午夜| 成人av电影在线播放| 91插插插插插插插插| 亚洲欧美综合图区| 天天干视频在线观看| 亚洲国产一区在线| 日韩欧美成人区| 欧美日韩在线视频播放| 欧美日韩免费观看一区| 欧美日韩亚洲视频| 一卡二卡三卡在线观看| 黄色激情在线视频| 欧美第一区第二区| 岳乳丰满一区二区三区| 一区二区三区偷拍| 精品国产99国产精品| 网站黄在线观看| 午夜激情视频网| 欧美精品第一页在线播放| 久久成人麻豆午夜电影| 一本加勒比波多野结衣| 国产精品大陆在线观看| 自拍偷拍欧美激情| 国产大屁股喷水视频在线观看| 96精品视频在线| 亚洲一区影音先锋| 国产黄色一区二区| 精品人妻一区二区三区免费| 久久久久久久久爱| 无码人妻精品一区二区三区不卡 | 久久久久久欧美精品色一二三四| 欧美视频在线一区二区三区| 久久婷婷影院| 欧美xxxx黑人又粗又长精品| 日韩av在线网址| 中文字幕av免费专区久久| 亚洲综合久久网| 午夜免费福利视频在线观看| 国产一区深夜福利| 亚洲第一网站免费视频| 国产美女精品在线| 国产无遮挡呻吟娇喘视频| 欧美精品aaaa| 97免费资源站| 日韩国产高清视频在线| 99久久精品免费精品国产| 国产成人久久久久| 国产极品粉嫩福利姬萌白酱| 久久人人看视频| 亚洲国产成人高清精品| 麻豆成人av在线| 青青国产在线观看| 中文字幕第三区| 一本一生久久a久久精品综合蜜| 久国内精品在线| 日韩欧美国产中文字幕| 国产91精品久久久久久久网曝门 | 日本一级特级毛片视频| 久久精品影视大全| 99国产盗摄| 九九精品视频在线| 精品国产乱码久久久久久免费| 欧美一级特黄视频| 尤物视频最新网址| 欧美国产视频一区二区| 欧美天天综合网| 国产精品久久久久影院老司| 黑人精品一区二区三区| 久久精品国产亚洲AV无码男同| 国产a级片视频| 欧美性受xxxx黑人猛交88| 成人久久18免费网站图片| 亚洲国产精彩中文乱码av| 日韩欧美国产骚| 97精品国产露脸对白| 蜜臀精品久久久久久蜜臀 | 狠狠干视频网站| 国产精品美女免费| 国语自产精品视频在免费| 国产网站欧美日韩免费精品在线观看| 国产精品电影一区二区| 白白色亚洲国产精品| 久久精品国产成人一区二区三区| 中文字幕日日夜夜| 手机看片久久久| 国产在线视频第一页| 亚洲女人毛茸茸高潮| 深爱五月激情网| 久久久国产精品无码| 黑人玩弄人妻一区二区三区| 特级黄色片视频| 午夜免费看毛片| 奇米视频7777| 可以免费在线看黄的网站| 人妻夜夜添夜夜无码av| 日韩免费毛片| 欧美一卡2卡3卡4卡无卡免费观看水多多| 在线观看精品国产视频| 亚洲欧美综合精品久久成人| 欧美日韩国产高清一区二区 | 国产毛片久久久久| 性一交一乱一乱一视频| 日本激情一区二区| 少妇精品高潮欲妇又嫩中文字幕| 免费观看黄色av| 日本最新不卡在线| 欧美福利在线视频| 国产精品自拍视频一区| 久久久精品福利| 国产一区二区在线视频聊天| 亚洲色成人www永久网站| 中文字幕在线观看你懂的| 日本免费不卡一区二区| 中文字幕66页| 91精品人妻一区二区三区| 欧洲一级黄色片| 日本免费www| 内射一区二区三区| 国产无遮挡又黄又爽又色视频| 欧美亚洲精品一区二区| 九一精品久久久| 亚洲永久无码7777kkk| 欧美极品jizzhd欧美18| 青青草av在线播放| 国产综合视频在线| 成人国产精品免费观看动漫 | 国产乱码精品一区二区三区av| 91免费在线视频观看| 综合久久给合久久狠狠狠97色| 色综合久久综合| 亚洲奶大毛多的老太婆| 欧美精品videos| 乱一区二区三区在线播放| 日本三级中文字幕在线观看| 午夜影院免费观看视频| 亚洲欧美日韩精品久久亚洲区| 欧美一性一乱一交一视频| 久久久久久久久久久一区| youjizz.com亚洲| 91蝌蚪视频在线| 国产传媒在线看| 成人午夜精品福利免费| 欧美高清在线精品一区| 精品三级在线看| 97在线观看视频| 在线免费观看成人| 在线播放免费视频| 四虎成人永久免费视频| 国产不卡免费视频| 欧美日韩日日夜夜| 7777免费精品视频| 国产美女作爱全过程免费视频| 女尊高h男高潮呻吟| 亚洲精品.www| 洋洋av久久久久久久一区| 欧美tk丨vk视频| 亚州国产精品久久久| 久久亚洲a v| 国产盗摄一区二区三区在线| 韩日欧美一区二区三区| 欧美日韩精品欧美日韩精品一| 色噜噜狠狠狠综合曰曰曰88av| 国产一区二区在线观看免费播放| 亚洲精品国产久| 欧美一区二区三区网站| 久久综合久久综合亚洲| 亚洲男人的天堂在线| 国产精品欧美久久| 波多野结衣办公室双飞| 成人毛片视频免费看| 福利视频第一区| 国产精品成人播放| 日本精品免费在线观看| 亚洲综合久久网| 国产三级一区二区| www.午夜精品| 久色视频在线播放| 日批视频免费观看| 日韩美女视频19| 97av在线播放| 午夜不卡福利视频| 97国产成人无码精品久久久| 亚洲h在线观看| 91av在线免费观看| 激情久久综合网| 日本不卡123| 亚洲精品一二区| 日韩精品在线视频免费观看| 在线视频不卡国产| 久草手机在线观看| 亚洲一区二区三区爽爽爽爽爽 | 亚洲视频视频在线| 欧美深夜福利视频| www日本高清| 欧美va在线播放| 一区二区三区四区国产| 日本中文字幕在线观看视频| 欧美日韩一区二区三区在线免费观看| 国产精品久久77777| 午夜影院免费观看视频| 成人网页在线观看| 91高清免费在线观看| 国产黑丝一区二区| 成人小视频在线| 日本一区二区三区在线播放| 久久精品一区二区免费播放| 国产亚洲欧美激情| 成人激情视频网| 成人一级片免费看| 亚洲免费av观看| 极品尤物一区二区三区| 国产又大又黄又粗| 欧美一区二区成人| 成人观看免费完整观看| 午夜精品福利一区二区三区蜜桃| 国产小视频国产精品| 亚洲伊人久久综合| 亚洲国内在线| 色噜噜狠狠永久免费| 成人免费的视频| 国产欧美亚洲日本| 久久综合婷婷| 人人爽久久涩噜噜噜网站| 中文字幕视频网| 最新日韩中文字幕| 欧美日韩综合一区二区| 日韩欧美中文字幕一区| 无码任你躁久久久久久老妇| 一本一道综合狠狠老| 午夜宅男在线视频| 亚洲国产精品久久不卡毛片| 免费看的黄色大片| 亚洲色图视频网站| 欧美女人性生活视频| 亚洲美女视频在线观看| 丰满人妻中伦妇伦精品app | 日本国产一级片| 午夜视频在线观看一区| 中文字幕有码av| 亚洲va欧美va国产va天堂影院| 日本黄网站免费| 性久久久久久久| 91大学生片黄在线观看| 国产精品白丝在线| 美女日批免费视频| 精品久久久久久久久久久久久| 青青草原国产在线视频| 欧美日本乱大交xxxxx| 人人人妻人人澡人人爽欧美一区| 亚洲国产97在线精品一区| 97在线观看免费高| 久久久久久av| 日本精品久久久久| 国产嫩草一区二区三区在线观看| 国产一区在线观看视频| 日韩精品一区二区三区丰满| 91丝袜美腿高跟国产极品老师 | 中文字幕一区二区人妻痴汉电车| 日韩av电影国产| 久久er99精品| 日本高清xxxx| 欧美性猛xxx| 农村老熟妇乱子伦视频| 欧美日韩国产第一页| 视频一区二区免费| 五月天av影院| 欧美日韩中文字幕在线视频| 啪啪一区二区三区| 日韩亚洲欧美在线| 九九热在线免费观看| 成人性生交大片免费看视频直播 | www.97超碰| 视频一区国产精品| 亚洲va在线va天堂| 中文字幕在线有码| 国产精品丝袜一区二区三区| 久久久高清一区二区三区| 国产福利精品一区二区三区| 亚洲热线99精品视频| 国产91免费看| 一本一道久久a久久精品综合 | 欧美三级午夜理伦| 高清视频一区二区三区| 亚洲乱码中文字幕综合| 成年人看的免费视频| 国产精品偷伦视频免费观看国产| 中文字幕欧美日本乱码一线二线| 无码人妻精品一区二区中文| 国产精品看片资源| 中文字幕一区二区三区在线播放| 久久视频精品在线观看| 91精品久久久久久久久| 亚洲麻豆国产自偷在线| 日韩欧美性视频| 亚洲一区二区三区四区中文| 日韩欧美国产一区在线观看| 日韩中文字幕免费在线观看| 99视频在线视频| 91高清免费视频| 亚洲一区免费观看| 日韩精品视频免费播放| 国产麻豆电影在线观看| 亚洲深夜福利网站| eeuss影院一区二区三区| 国产123在线| 免费日韩电影在线观看| 亚洲成人中文字幕| 国产一区二区三区免费| 国产美女免费无遮挡| 久久久亚洲综合网站| 亚洲国产精彩中文乱码av| 国产一区二区三区在线看麻豆 | 欧美精品videos| 亚洲电影一级黄| 精品人妻伦一二三区久久| 99精品视频国产| 91丝袜脚交足在线播放| 欧美成人r级一区二区三区| 国产精品自在欧美一区| 九九精品视频免费| 欧美性猛交内射兽交老熟妇| 欧美成人剧情片在线观看| 亚洲一二三区在线观看| 全国男人的天堂网| 国产精品成人无码免费| 国产精品久久999| 亚洲国产sm捆绑调教视频| 黄色福利在线观看| 亚洲最大成人综合网| 久久免费一级片| 国产精品www| 亚洲激情视频在线播放| 国产欧美精品国产国产专区 | 亚洲天堂视频在线观看| 国产精品久久久久久福利一牛影视| 永久免费无码av网站在线观看| 四季av一区二区三区| 九九九九精品| 欧美另类在线观看| 欧美丝袜自拍制服另类| av一本久道久久综合久久鬼色| 国产黄色免费视频| 亚洲一区二区三区无码久久| 樱花www成人免费视频| 国产www精品| 亚洲色图第三页| 欧美午夜精品久久久久久久| 福利91精品一区二区三区| 国产一区二区三区黄片| 成人高潮免费视频| 久久成年人网站| 中国 免费 av| 国产精品久久久av久久久| 亚洲国产天堂久久国产91| 亚洲成人av一区二区三区| av高清不卡在线| 先锋av资源站| 激情久久av一区av二区av三区|