Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana Membatasi Kedalaman Rekursi CTE tetapi Memilih Tabel Generik?

Jika semua yang ingin Anda lakukan dengan bidang level Anda adalah membatasi jumlah rekursi, Anda harus dapat menggunakan MAXRECURSION petunjuk kueri , kira-kira seperti ini:

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)

Sunting:

Sebagai jawaban atas pertanyaan di komentar, tidak, Anda tidak dapat menekan kesalahan yang Anda dapatkan saat berulang lebih dari yang dimungkinkan oleh pengaturan MAXRECURSION Anda. Jika saya memahami Anda dengan benar, Anda dapat melakukan sesuatu seperti ini:

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;

Ini harus sama generiknya dengan apa yang Anda miliki di atas, dengan asumsi Anda tidak berencana mengubah bidang kunci utama atau hierarkis.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perilaku bergabung silang (SQLServer 2008)

  2. cara terbaik untuk mengonversi dan memvalidasi string tanggal

  3. Visual Studio 2012 - Wizard Penerbitan Database Dihentikan?

  4. Menggunakan Pencarian Teks Lengkap di SQL Server 2008 di beberapa tabel, kolom

  5. Metode SqlDataAdapter.Fill lambat