SqlServer使用公用表表達式(CTE)實現(xiàn)無限級樹形構(gòu)建
SQL Server 2005開始,我們可以直接通過CTE來支持遞歸查詢,CTE即公用表表達式
公用表表達式(CTE),是一個在查詢中定義的臨時命名結(jié)果集將在from子句中使用它。每個CTE僅被定義一次(但在其作用域內(nèi)可以被引用任意次),并且在該查詢生存期間將一直生存??梢允褂肅TE來執(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, Level FROM cte_parent WHERE Level <=@Level; public static List<LogisticsCategoryTreeEntity> GetLogisticsCategoryByParent(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<LogisticsCategoryTreeEntity> allCategoryList, List<LogisticsCategoryTreeEntity> 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<LogisticsCategoryTreeEntity>(); category.children.AddRange(subCategoryList); BuildCategory(allCategoryList, category.children); } } }
上一篇:SQL Server實現(xiàn)自動循環(huán)歸檔分區(qū)數(shù)據(jù)腳本詳解
欄 目:MsSql
本文標(biāo)題:SqlServer使用公用表表達式(CTE)實現(xiàn)無限級樹形構(gòu)建
本文地址:http://mengdiqiu.com.cn/a1/MsSql/10435.html
您可能感興趣的文章
- 01-10SQLServer存儲過程實現(xiàn)單條件分頁
- 01-10SQLServer中防止并發(fā)插入重復(fù)數(shù)據(jù)的方法詳解
- 01-10SqlServer 在事務(wù)中獲得自增ID的實例代碼
- 01-10SqlServer快速檢索某個字段在哪些存儲過程中(sql 語句)
- 01-10SQLServer性能優(yōu)化--間接實現(xiàn)函數(shù)索引或者Hash索引
- 01-10SQLServer數(shù)據(jù)庫中開啟CDC導(dǎo)致事務(wù)日志空間被占滿的原因
- 01-10SQL Server獲取磁盤空間使用情況
- 01-10MSSQL 2000 使用幫助(sql server簡明教程)
- 01-10SQLServer中使用擴展事件獲取Session級別的等待信息及SQLServer 2016中
- 01-10SQL Server 使用觸發(fā)器(trigger)發(fā)送電子郵件步驟詳解


閱讀排行
本欄相關(guān)
- 01-10SQLServer存儲過程實現(xiàn)單條件分頁
- 01-10SQLServer中防止并發(fā)插入重復(fù)數(shù)據(jù)的方
- 01-10SQL Server 2012降級至2008R2的方法
- 01-10SQL Server性能調(diào)優(yōu)之緩存
- 01-10SQL Server數(shù)據(jù)庫定時自動備份
- 01-10Sql Server 死鎖的監(jiān)控分析解決思路
- 01-10實現(xiàn)SQL Server 原生數(shù)據(jù)從XML生成JSON數(shù)
- 01-10SqlServer快速檢索某個字段在哪些存儲
- 01-10SqlServer 在事務(wù)中獲得自增ID的實例代
- 01-10SQLServer性能優(yōu)化--間接實現(xiàn)函數(shù)索引或
隨機閱讀
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10delphi制作wav文件的方法
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 04-02jquery與jsp,用jquery
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-10C#中split用法實例總結(jié)
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文