如何在SqlServer中使用公用表表达式构建无限树结构

分类:编程技术 时间:2024-02-20 15:27 浏览:0 评论:0
0
如何在SqlServer中使用公用表表达式实现无限树构建。针对这一问题,本文详细介绍了相应的分析和解答。希望能够帮助更多想要解决这个问题的朋友找到更简单、更容易的解决方案。方法。

从SQL Server 2005开始,我们可以直接通过CTE支持递归查询,CTE就是公用表表达式

公用表表达式(CTE)是在查询中定义一个临时的名为结果集将在 from 子句中使用。每个 CTE 仅定义一次(但可以在其范围内引用任意多次),并且只要该查询存在,它就会存在。 CTE 可用于执行递归操作。

声明 @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. ProductCategoryWITH(NOLOCK)WHEREcategory_idIN(SELECTcategory_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 级别 FROM TianShenLogistic.dbo.ProductCategory b INNER JOIN cte_parent a ON a.CategoryID= b.parent_category_id)SELECT CategoryID AS 值,CategoryName 作为标签,ParentCategoryID 作为parentId,LevelFROM cte_parent WHERE Level <=@Level;public static List GetLogisticsCategoryByParent(int? level) { if (level < 1) return null; } var dataResult = CategoryDA.GetLogisticsCategoryByParent(level); var firstlevel = dataResult.Where(d => d.level == 1).ToList(); BuildCategory(dataResult, 第一级);返回第一级; } private static void BuildCategory(List allCategoryList, List CategoryList) { foreach (varcategoryList 中的类别) { var subCategoryList = allCategoryList.Where(c => c.parentId ==category.value).ToList() ; if (subCategoryList.Count >0) { if (category.children == null)category.children = new List();类别.children.AddRange(subCategoryList); BuildCategory(allCategoryList, 类别.children);}                                                                                                                                                                                             如果您还有很多疑问没有解答,您可以关注行业资讯频道了解更多相关知识。 

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何在SqlServer中使用公用表表达式构建无限树结构

用户评论