成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁(yè) > 知識(shí)庫(kù) > sqlserver另類(lèi)非遞歸的無(wú)限級(jí)分類(lèi)(存儲(chǔ)過(guò)程版)

sqlserver另類(lèi)非遞歸的無(wú)限級(jí)分類(lèi)(存儲(chǔ)過(guò)程版)

熱門(mén)標(biāo)簽:臨沂智能電銷(xiāo)機(jī)器人加盟哪家好 一個(gè)導(dǎo)航軟件能用幾個(gè)地圖標(biāo)注點(diǎn) 小e電話(huà)機(jī)器人 外呼運(yùn)營(yíng)商線(xiàn)路收費(fèi) 貴州房產(chǎn)智能外呼系統(tǒng)供應(yīng)商 鎮(zhèn)江網(wǎng)路外呼系統(tǒng)供應(yīng)商 申請(qǐng)400電話(huà)在哪辦理流程 電銷(xiāo)外呼有錄音系統(tǒng)有哪些 百度地圖標(biāo)注改顏色
下面是我統(tǒng)計(jì)的幾種方案:

第一種方案(遞歸式):

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

第二種方案:
設(shè)置一個(gè)varchar類(lèi)型的CategoryPath字段來(lái)保存目錄的完整路徑,將父目錄id用符號(hào)分隔開(kāi)來(lái)。比如:1,5,8,10

第三種方案:
每級(jí)分類(lèi)遞增兩位數(shù)字的方法
示例:
一級(jí)分類(lèi):01,02,03,04...
二級(jí)分類(lèi):0101,0102,0103,0104...
三級(jí)分類(lèi):010101,010102,010103...

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

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

而我今天要說(shuō)的算法其實(shí)是第二種方案的改進(jìn)版,一般做分類(lèi)都是使用一個(gè)表格來(lái)保存分類(lèi)信息。
而我這里,要新建兩個(gè)表格,一個(gè)表格是保存分類(lèi)信息表,一個(gè)保存分類(lèi)關(guān)系表。

表結(jié)構(gòu)如下:
表1:tomi_Category
CategoryID int(4), '編號(hào)
CategoryName nvarchar(50), '分類(lèi)名稱(chēng)
Depth int(4), '深度
表2:tomi_CategoryBind
CategoryID int(4),
BindCategoryID int(4),
Depth int(4),

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

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

--生成不重復(fù)的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

每個(gè)分類(lèi)在tomi_CategoryBind有完整的目錄結(jié)構(gòu)。。一個(gè)分類(lèi)在tomi_CategoryBind的記錄數(shù)等于他在tomi_Category的depth值。

圖片:

2、編輯修改分類(lèi)(Category_Edit)
復(fù)制代碼 代碼如下:

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
--檢測(cè)是否更改了上級(jí)目錄
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
--得到上級(jí)目錄的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、刪除分類(lèi)(Category_Del) 會(huì)直接刪除子分類(lèi)
復(fù)制代碼 代碼如下:

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、分類(lèi)列表,顯示分類(lèi)(Category_List)

復(fù)制代碼 代碼如下:

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 可以直接讓分類(lèi)等級(jí)查詢(xún)出來(lái)。而且顯示全部的話(huà),一次查詢(xún)即可,只需判斷depth就行。
圖片:

5、上級(jí)子分類(lèi)列表 (Category_upTree)
復(fù)制代碼 代碼如下:

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 這樣就可以得到一個(gè)分類(lèi)的完整子目錄集,方便吧,只要一條sql.
圖片:

6、下級(jí)子分類(lèi)列表(Category_downTree)
復(fù)制代碼 代碼如下:

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 這樣可以得到一個(gè)分類(lèi)完整下級(jí)目錄。比如得到某個(gè)分類(lèi)和其分類(lèi)的子分類(lèi)下的所有產(chǎn)品用這個(gè)就好。。方便,一條sql.
圖片:

以上是初稿,只是隨意的測(cè)試了幾次。。。有錯(cuò)誤的,還請(qǐng)大家指出。。

呵呵。轉(zhuǎn)載請(qǐng)注明鏈接,博客園首發(fā),多謝。
作者:TomiWong
時(shí)間:2010.07.18
您可能感興趣的文章:
  • 使用SqlServer CTE遞歸查詢(xún)處理樹(shù)、圖和層次結(jié)構(gòu)
  • 在sqlserver中如何使用CTE解決復(fù)雜查詢(xún)問(wèn)題
  • SQLSERVER2008中CTE的Split與CLR的性能比較
  • 使用SQLSERVER 2005/2008 遞歸CTE查詢(xún)樹(shù)型結(jié)構(gòu)的方法
  • SQLSERVER2005 中樹(shù)形數(shù)據(jù)的遞歸查詢(xún)
  • SqlServer使用公用表表達(dá)式(CTE)實(shí)現(xiàn)無(wú)限級(jí)樹(shù)形構(gòu)建

標(biāo)簽:合肥 澳門(mén) 日照 嘉興 三明 保定 延邊 晉城

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《sqlserver另類(lèi)非遞歸的無(wú)限級(jí)分類(lèi)(存儲(chǔ)過(guò)程版)》,本文關(guān)鍵詞  sqlserver,另類(lèi),非,遞歸,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《sqlserver另類(lèi)非遞歸的無(wú)限級(jí)分類(lèi)(存儲(chǔ)過(guò)程版)》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于sqlserver另類(lèi)非遞歸的無(wú)限級(jí)分類(lèi)(存儲(chǔ)過(guò)程版)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    亚洲国产成人精品综合99| 国产精品香蕉一区二区三区| 亚洲精品综合在线观看| 亚洲欧洲国产专区| 亚洲福利一二三区| 超碰精品在线观看| 亚洲色图17p| 免费在线视频一区二区| 91丨porny丨国产| 欧美图片一区二区三区| 不卡的日韩av| 久久精品国产精品亚洲综合| 综合天天久久| 综合av色偷偷网| 亚洲第一精品网站| 青娱乐国产91| 亚洲一区日韩精品| 中文字幕777| 秋霞成人影院| 日本午夜精品理论片a级app发布| 三级理论午夜在线观看| 欧美xxxx做受欧美| 动漫视频在线一区| 如如影视在线观看经典| 国产精品美女久久久| 亚洲精品一区二三区不卡| 国产亚洲精品久久久久动| 亚洲精品成人久久| 久久久久久久久免费视频| 亚洲精品男人| 国内外成人免费激情在线视频| 视频亚洲一区二区| 亚洲人成毛片在线播放| 精品美女国产在线| 成人av高清在线| 一区二区视频在线播放| 欧美日韩精品中文字幕| 天堂成人免费av电影一区| 国产精品久久久久久久久久久久久久久久久| 免费观看一区二区三区| 最新国产在线视频| 国产69精品久久久久999小说| 成人手机在线电影| 一本久道久久综合无码中文| 姑娘第5集在线观看免费好剧| 蜜桃传媒一区二区亚洲| 日本不卡三区| 91九色美女在线视频| 亚洲最大成人在线观看| 成人欧美一区二区三区黑人麻豆| 欧美一级夜夜爽| 手机av在线网| av免费看大片| 精品久久久久久久久久久久久久久久久久| 欧美freesex8一10精品| 伊人情人网综合| 色妞色视频一区二区三区四区| 日本三级网站在线观看| 狠狠色噜噜狠狠色综合久| 亚洲一区中文字幕在线| 亚洲一区免费看| 超碰免费在线观看| 免费在线高清av| bt在线麻豆视频| 美女www一区二区| 国产精品探花一区二区在线观看| 精品少妇一区二区30p| 久久久无码中文字幕久...| 欧美艳星kaydenkross| 韩国三级电影一区二区| 国产精品久久九九| 影音先锋日韩在线| 日韩欧美区一区二| 2020中文字幕在线| 天天摸天天操天天干| www.久久色| yw.139尤物在线精品视频| 欧美 日韩 国产 成人 在线观看| 日本a一级在线免费播放| 1区2区3区在线视频| 理论片鲁丝二区爱情网| xxxxx欧美| 337p亚洲精品色噜噜噜| 久久99精品久久只有精品| 99精品视频免费| 亚洲精品videosex极品| 欧美最大成人综合网| 国产欧美日韩一区二区三区四区| 成人欧美一区| 国产精品成人一区二区| 亚洲 精品 综合 精品 自拍| 亚洲春色在线视频| 中文字幕伦av一区二区邻居| 精品久久免费看| 亚洲欧美日韩成人高清在线一区| 好爽好深好紧好大| 午夜剧场免费看| 成人18精品视频| 中文xxx视频| 538任你躁在线精品免费| 日韩一区二区三区色| 不卡中文一二三区| 久久麻豆精品| 精品91福利视频| 黄色免费看视频| 欧美日韩在线亚洲一区蜜芽| 久久精品无码一区二区日韩av| 亚洲免费影视第一页| 久久国产精品久久| 国产中文字幕在线观看| 欧美大电影免费观看| 亚洲网站在线观看| 视频在线一区二区三区| 国产成人精品一区二区在线小狼| 91精品视频免费| 亚洲私人影院| 中文字幕2019第三页| 日本一道本视频| 警花观音坐莲激情销魂小说| 日本视频一区二区三区| 久久黄色级2电影| 成人精品天堂一区二区三区| 激情内射人妻1区2区3区| 欧美大片免费久久精品三p| 综合一区av| 国产美女www| 男生裸体视频网站| 国产精品一二区| 在线这里只有精品| 久久久久亚洲av无码专区桃色| 一级片在线观看| 久久爱com| 久久久精品综合| 极品少妇xxxx精品少妇| 久久精品国产欧美亚洲人人爽| 国产在线精品一区二区中文| 亚洲欧洲视频在线观看| 亚洲日本中文字幕| 在线视频日韩一区| 久久人人爽人人爽爽久久| 好吊日精品视频| 亚洲经典一区二区| 欧美另类69xxx| 麻豆一区二区三| 午夜免费视频网站| 欧美日韩国产免费一区二区三区| 国产主播精品在线| 丰满人妻一区二区三区53视频| 97se视频在线观看| 在线观看亚洲国产| 日韩黄色片在线| 欧美国产欧美亚洲国产日韩mv天天看完整| 在线观看亚洲国产| 精品欧美一区二区久久久| 强乱中文字幕av一区乱码| 日韩欧美电影| 国产盗摄精品一区二区酒店| 中文字幕视频在线播放| 欧美视频一区二区三区在线观看| 视频在线观看一区| 亚洲一区二区三区久久久| 强乱中文字幕av一区乱码| 婷婷久久国产对白刺激五月99| 国产精品污www一区二区三区| 蜜桃tv在线播放| 青青艹在线观看| 91成人免费在线观看| 久久综合久久久久| 青草视频在线观看视频| 69av视频在线观看| 黄色网页在线| 亚洲s码欧洲m码国产av| 久热这里只有精品6| 午夜精品久久久久久久99老熟妇| 亚洲成色在线综合网站2018站| 亚洲一区影音先锋| 国产污片在线观看| 女~淫辱の触手3d动漫| 日韩中文影院| 欧美国产日本| 国产成人精品www牛牛影视| 欧美人体视频xxxxx| 精品无人区一区二区三区| 日本www在线观看视频| 91精品啪在线观看国产18| 国产又爽又黄免费视频| 亚洲毛片欧洲毛片国产一品色| a级网站在线观看| 久草在线新资源| 日本视频一二三区中文字幕| 日韩avvvv在线播放| 91日本在线视频| 538在线视频| 欧美日韩一区二区不卡| 一本一本久久a久久综合精品| 欧美噜噜久久久xxx| 成人亚洲一区二区三区| 亚洲男人天堂网站| 欧美不卡福利| 在线成人超碰| 永久免费看av| 欧美做受喷浆在线观看| 中文字幕欧美国产| 在线播放亚洲激情| 欧美网色网址| 国产欧美精品aaaaaa片| 艳妇乳肉豪妇荡乳av无码福利| 国产成a人亚洲精| 国产性xxxx18免费观看视频| 国产裸体歌舞团一区二区| 日韩不卡手机在线v区| 欧美日韩国产经典色站一区二区三区| 国产jk精品白丝av在线观看| 中文字幕日韩av综合精品| 日韩精品免费在线视频观看| 国产精品视频白浆免费视频| 久久精品电影| 日韩av电影天堂| 岛国在线最新| 欧美大片免费播放| 亚洲精品国久久99热| 97caopor国产在线视频| 日韩精品一区二区三区四| 国产在线一区二区三区四区| 中文乱码字幕高清在线观看| 国产在线精品一区二区三区》| 欧美猛交免费看| 国产小视频免费在线观看| 亚洲一级黄色录像| 又粗又大的机巴好爽欧美| 一二三中文字幕在线| 国产羞羞视频| 久久99精品国产麻豆不卡| 日韩欧美中文字幕在线播放| 亚洲一级黄色大片| 日韩欧美在线看| 伦伦影院午夜日韩欧美限制| 国产在线一在线二| 亚洲大片免费观看| 国产免费视频在线| 亚洲肉体裸体xxxx137| 欧美大秀在线观看| 无码无遮挡又大又爽又黄的视频| 九九热在线播放| 99草草国产熟女视频在线| www.久久精品| 中文字幕在线观看播放| 亚洲一区美女视频在线观看免费| 国产91足控脚交在线观看| 久久久久国产精品免费| 国产成人无码一二三区视频| 影音先锋国产精品| 免费电影一区二区三区| 亚洲精品黑牛一区二区三区| 久久久久久久久久久免费| caoporm免费视频在线| 51精品国产人成在线观看| 日韩三级小视频| 99精品热6080yy久久| 三级精品视频| 91精品一区二区三区久久久久久| 老色鬼在线视频| 成人精品久久一区二区三区| 免费a视频在线观看| 黄瓜视频污在线观看| 国产精品无码免费播放| 九九视频在线免费观看| xfplay精品久久| 成人综合专区| 中文字幕一区二区三区电影| 黄视频在线观看免费| 国产黄页在线观看| 国产一二三四在线视频| 国产精品久久久久久久久久久新郎| 欧美性suv| 成人自拍网站| 中文亚洲视频在线| 国语自产精品视频在线看抢先版图片| 久久一区二区三区四区| 免费看的av网站| 黄色小视频在线免费观看| 日韩欧美国产综合在线一区二区三区| 午夜免费精品视频| 91嫩草在线视频| 国产精品亚洲不卡a| 久久人人97超碰国产公开结果| 在线播放三级网站| 亚洲aa在线观看| 国产麻豆成人传媒免费观看| 美日韩丰满少妇在线观看| 国产va在线观看| 福利一区二区在线观看| 欧美另类69xxxx| 久久久久久噜噜噜久久久精品| 国产青草视频在线观看视频| 国产高清自产拍av在线| 中文字幕久精品免费视频| 国产肥白大熟妇bbbb视频| 思思久久精品视频| 激情婷婷综合网| 欧美三级 欧美一级| www.五月天激情| 91高清国产| 日韩免费中文专区| 一色屋成人免费精品网| 教室别恋欧美无删减版| 久久久久久免费精品| 中国精品18videos性欧美| 午夜免费一区二区| 自拍偷拍亚洲欧美| av免费在线播放网站| 亚洲欧美一区二区三区久本道91| 九一精品久久久| 国产精品777777在线播放| 超碰97国产精品人人cao| 97超级碰碰| 久久精品国产露脸对白| 99国产精品一区二区三区| 一区二区三区国产福利| 国产精品入口麻豆高清| 久久精品欧美一区二区三区麻豆| 先锋影音网一区| 精品少妇久久久久久888优播| 97超碰资源站| 在线观看一区二区精品视频| 精品国产一二区| 精品久久人人做人人爱| 国产a√精品区二区三区四区|