Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm thế nào để Hạn chế Độ sâu Đệ quy CTE nhưng Chọn Bảng Chung?

Nếu tất cả những gì bạn muốn làm với trường cấp của mình là giới hạn số lần đệ quy, bạn có thể sử dụng MAXRECURSION gợi ý truy vấn , một cái gì đó như thế này:

WITH Department_CTE AS
(
    SELECT
        DepartmentGroupKey,
        ParentDepartmentGroupKey,
        DepartmentGroupName
    FROM dimDepartmentGroup
    WHERE DepartmentGroupKey = 2
    UNION ALL
    SELECT
        Child.DepartmentGroupKey,
        Child.ParentDepartmentGroupKey,
        Child.DepartmentGroupName
    FROM Department_CTE AS Parent
        JOIN DimDepartmentGroup AS Child
            ON Parent.ParentDepartmentGroupKey = Child.DepartmentGroupKey
)
SELECT * FROM Department_CTE
OPTION (MAXRECURSION 2)

Chỉnh sửa:

Trả lời cho câu hỏi trong phần nhận xét, không, bạn không thể loại bỏ lỗi bạn gặp phải khi lặp lại nhiều lần hơn cài đặt MAXRECURSION của bạn cho phép. Nếu tôi hiểu đúng về bạn, bạn có thể làm như sau:

WITH CTE AS
(
    -- Start CTE off by selecting the task that was provided to stored procedure.
    SELECT Id, 0 as [Level]
    FROM [dbo].[TestTable]
    WHERE [Id] = 1
    -- Recursively add tasks that are children of parent tasks that have already been found in previous iterations.
    UNION ALL
    SELECT t.Id, [Level] + 1
    FROM [dbo].[TestTable] as t
    INNER JOIN CTE as tcte
        ON t.[ParentId] = tcte.[Id]
    WHERE [Level] < 2
),
CTE2 AS
(
    SELECT TestTable.*
    FROM CTE
        INNER JOIN TestTable ON CTE.Id = TestTable.Id
)
SELECT * FROM CTE2;

Điều này cũng phải chung chung như những gì bạn có ở trên, giả sử bạn không có kế hoạch thay đổi các trường phân cấp hoặc khóa chính.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tìm ngôn ngữ mặc định của người dùng trong SQL Server (T-SQL)

  2. Thêm cột khóa chính trong bảng SQL

  3. Chọn các hàng có giá trị cột đã thay đổi

  4. Chế độ xem thay thế trong quy trình được lưu trữ

  5. Cách tạo bí danh kiểu dữ liệu do người dùng xác định trong SQL Server bằng T-SQL