新聞中心
SqlServer中怎么利用公用表表達(dá)式實(shí)現(xiàn)無(wú)限級(jí)樹(shù)形構(gòu)建,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
創(chuàng)新互聯(lián)專(zhuān)業(yè)提供成都二樞服務(wù)器租用托管服務(wù),為用戶(hù)提供五星數(shù)據(jù)中心、電信、雙線接入解決方案,用戶(hù)可自行在線購(gòu)買(mǎi)成都二樞服務(wù)器租用托管服務(wù),并享受7*24小時(shí)金牌售后服務(wù)。
SQL Server 2005開(kāi)始,我們可以直接通過(guò)CTE來(lái)支持遞歸查詢(xún),CTE即公用表表達(dá)式
公用表表達(dá)式(CTE),是一個(gè)在查詢(xún)中定義的臨時(shí)命名結(jié)果集將在from子句中使用它。每個(gè)CTE僅被定義一次(但在其作用域內(nèi)可以被引用任意次),并且在該查詢(xún)生存期間將一直生存。可以使用CTE來(lái)執(zhí)行遞歸操作。
DECLARE @Level INT=3;WITH cte_parent(CategoryID,CategoryName,ParentCategoryID,Level)AS( SELECT category_id,category_name,parent_category_id,1 AS Level FROM TianShenLogistic.dbo.ProductCategory WITH(NOLOCK) WHERE category_id IN ( SELECT category_id FROM TianShenLogistic.dbo.ProductCategory WHERE parent_category_id=0 ) UNION ALL SELECT b.category_id,b.category_name,b.parent_category_id,a.Level+1 AS Level FROM TianShenLogistic.dbo.ProductCategory b INNER JOIN cte_parent a ON a.CategoryID = b.parent_category_id)SELECT CategoryID AS value, CategoryName as label, ParentCategoryID As parentId, LevelFROM cte_parent WHERE Level <=@Level;public static ListGetLogisticsCategoryByParent(int? level) { if (level < 1) return null; var dataResult = CategoryDA.GetLogisticsCategoryByParent(level); var firstlevel = dataResult.Where(d => d.level == 1).ToList(); BuildCategory(dataResult, firstlevel); return firstlevel; } private static void BuildCategory(List allCategoryList, List categoryList) { foreach (var category in categoryList) { var subCategoryList = allCategoryList.Where(c => c.parentId == category.value).ToList(); if (subCategoryList.Count > 0) { if (category.children == null) category.children = new List (); category.children.AddRange(subCategoryList); BuildCategory(allCategoryList, category.children); } } }
關(guān)于SqlServer中怎么利用公用表表達(dá)式實(shí)現(xiàn)無(wú)限級(jí)樹(shù)形構(gòu)建問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
網(wǎng)頁(yè)標(biāo)題:SqlServer中怎么利用公用表表達(dá)式實(shí)現(xiàn)無(wú)限級(jí)樹(shù)形構(gòu)建
當(dāng)前路徑:http://www.ef60e0e.cn/article/psddes.html