• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    使用SqlServer CTE递归查询处理树、图和层次结构

    CTE(Common Table Expressions)是从SQL Server 2005以后版本才有的。指定的临时命名结果集,这些结果集称为CTE。 与派生表类似,不存储为对象,并且只在查询期间有效。与派生表的不同之处在于,CTE 可自引用,还可在同一查询中引用多次。使用CTE能改善代码可读性,且不损害其性能。

    递归CTE是SQL SERVER 2005中重要的增强之一。一般我们在处理树,图和层次结构的问题时需要用到递归查询。

    CTE的语法如下

     WITH CTE AS
     (
       SELECT EmpId, ReportTo, FName FROM Employ WHERE EmpId=
       UNION ALL
       SELECT emp.EmpId, emp.ReportTo, emp.FName FROM CTE JOIN Employ as emp ON CTE.EmpId=emp.ReportTo
     )

    递归CTE最少包含两个查询(也被称为成员)。第一个查询为定点成员,定点成员只是一个返回有效表的查询,用于递归的基础或定位点。第二个查询被称为递归成员,使该查询称为递归成员的是对CTE名称的递归引用是触发。在逻辑上可以将CTE名称的内部应用理解为前一个查询的结果集。

    递归查询没有显式的递归终止条件,只有当第二个递归查询返回空结果集或是超出了递归次数的最大限制时才停止递归。是指递归次数上限的方法是使用MAXRECURION。

     USE AdventureWorks;
     GO
     --Creates an infinite loop
     WITH cte (EmployeeID, ManagerID, Title) as
     (
       SELECT EmployeeID, ManagerID, Title
       FROM HumanResources.Employee
       WHERE ManagerID IS NOT NULL
      UNION ALL
       SELECT cte.EmployeeID, cte.ManagerID, cte.Title
       FROM cte 
       JOIN HumanResources.Employee AS e 
         ON cte.ManagerID = e.EmployeeID
     )
     --Uses MAXRECURSION to limit the recursive levels to 
     SELECT EmployeeID, ManagerID, Title
     FROM cte
     OPTION (MAXRECURSION );
     GO

    以上内容就是本文给大家介绍的使用SqlServer CTE递归查询处理树、图和层次结构,希望大家喜欢。

    您可能感兴趣的文章:
    • 在sqlserver中如何使用CTE解决复杂查询问题
    • SQLSERVER2008中CTE的Split与CLR的性能比较
    • 使用SQLSERVER 2005/2008 递归CTE查询树型结构的方法
    • SQLSERVER2005 中树形数据的递归查询
    • sqlserver另类非递归的无限级分类(存储过程版)
    • SqlServer使用公用表表达式(CTE)实现无限级树形构建
    上一篇:在sqlserver中如何使用CTE解决复杂查询问题
    下一篇:日常收集常用SQL查询语句大全
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    使用SqlServer CTE递归查询处理树、图和层次结构 使用,SqlServer,CTE,递归,查询,