> 데이터 베이스 > MySQL 튜토리얼 > 재귀 CTE는 SQL Server에서 어떻게 한 줄씩 실행됩니까?

재귀 CTE는 SQL Server에서 어떻게 한 줄씩 실행됩니까?

Mary-Kate Olsen
풀어 주다: 2024-12-30 09:52:10
원래의
349명이 탐색했습니다.

How Does a Recursive CTE Execute Line by Line in SQL Server?

재귀 CTE의 라인별 실행

재귀 공통 테이블 표현식(CTE)은 이해하기 어려운 경우가 많지만 실행 라인을 다음과 같이 분류하여 이해하십시오. line.

Anchor

SELECT  id, Name, ParentID, CAST(Name AS VARCHAR(1000)) AS Path
FROM    @tbl
WHERE   ParentId IS NULL
로그인 후 복사
  • 앵커는 ParentId가 NULL인 최상위 노드를 선택합니다.
  • 다음 열: id, Name, ParentID 및 노드의 값으로 초기화된 Path 열 name.

재귀 멤버

SELECT  t.id, t.Name, t.ParentID, CAST((a.path + '/' + t.Name) AS VARCHAR(1000)) AS "Path"
FROM    @tbl AS t
JOIN    abcd AS a
ON      t.ParentId = a.id
로그인 후 복사
  • 재귀 멤버는 ParentId를 기반으로 @tbl로 임시 테이블 abcd를 조인하여 하위 노드를 선택합니다.
  • 부모 노드에 자식 노드의 이름을 추가합니다. 경로.

끝없는 UNION ALL

재귀 CTE를 반복할 때마다 새로운 수준의 계층 구조를 추가하면서 수평으로 확장되는 끝없는 UNION ALL이라고 생각해 보세요. 예를 들어 abcd2에는 abcd1의 하위 노드가 포함되고, abcd3에는 abcd2의 하위 노드가 포함되는 식입니다.

각 반복

  • 앵커는 절대로 이후 반복에서는 건너뛰었습니다. 항상 최상위 노드를 선택합니다.
  • 재귀 멤버는 하위 노드를 이전에 선택한 노드에 결합하여 계층 구조를 생성합니다.
  • 각 반복이 진행됨에 따라 경로 열이 업데이트되어 반영됩니다. 올바른 부모-자식 관계.

중지 조건

이론적으로 재귀 CTE는 무한정 실행될 수 있습니다. 그러나 SQL Server는 중지 조건을 구현하여 무한 레코드 집합을 방지합니다. 재귀 멤버가 새 행을 생성하지 못하면 반복이 중지됩니다.

이 예에서 재귀 멤버가 abcd6 수준의 하위 노드를 찾지 못하면 반복이 종료됩니다.

최종 결과

최종 결과는 최상위 노드부터 시작하여 완전한 계층 트리입니다. 가장 낮은 수준까지 확장됩니다. 경로 열은 계층 구조의 각 노드에 대한 전체 경로를 제공합니다.

위 내용은 재귀 CTE는 SQL Server에서 어떻게 한 줄씩 실행됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿