Menakluki Had Rekursi Pelayan SQL dalam CTE Rekursif
Apabila bekerja dengan Ungkapan Jadual Biasa (CTE) rekursif dalam Pelayan SQL, anda mungkin menghadapi ralat "melebihi kedalaman pengulangan maksimum" yang ditakuti. Ini berlaku apabila pertanyaan rekursif bersarang anda melepasi had pangkalan data yang dipratentukan.
Penyelesaian melibatkan penggunaan pilihan maxrecursion
:
Berikut ialah cara mengubah suai pertanyaan anda untuk menangani isu ini:
<code class="language-sql">WITH EmployeeHierarchy AS ( SELECT EMP_SRC_ID_NR AS Id, USR_ACV_DIR_ID_TE AS Uuid, ISNULL(Employees.APV_MGR_EMP_ID, '0') AS ApprovalManagerId FROM dbo.[tEmployees] AS Employees WITH (NOLOCK) WHERE APV_MGR_EMP_ID = @Id AND Employees.APV_MGR_EMP_ID IS NOT NULL AND Employees.EMP_SRC_ID_NR IS NOT NULL UNION ALL SELECT EMP_SRC_ID_NR AS Id, USR_ACV_DIR_ID_TE AS Uuid, ISNULL(Employees.UPS_ACP_EMP_NR, '1') AS ApprovalManagerId FROM dbo.[tEmployees] AS Employees WITH (NOLOCK) WHERE UPS_ACP_EMP_NR = @Id AND Employees.APV_MGR_EMP_ID IS NOT NULL AND Employees.EMP_SRC_ID_NR IS NOT NULL UNION ALL SELECT Employees.EMP_SRC_ID_NR, Employees.USR_ACV_DIR_ID_TE, ISNULL(Employees.APV_MGR_EMP_ID, '2') FROM dbo.[tEmployees] AS Employees WITH (NOLOCK) JOIN EmployeeHierarchy ON Employees.APV_MGR_EMP_ID = EmployeeHierarchy.Id WHERE Employees.APV_MGR_EMP_ID IS NOT NULL AND Employees.EMP_SRC_ID_NR IS NOT NULL ) SELECT Id AS EmployeeId, Uuid AS EmployeeUuid, ApprovalManagerId AS ManagerId FROM EmployeeHierarchy OPTION (MAXRECURSION 0);</code>
Dengan menambahkan OPTION (MAXRECURSION 0)
, anda menghapuskan had rekursi dengan berkesan, membolehkan pertanyaan berjalan selama-lamanya. Walau bagaimanapun, berhati-hati apabila menggunakan MAXRECURSION 0
. Pastikan logik CTE anda betul untuk mengelakkan gelung tak terhingga yang boleh membawa kepada isu prestasi atau ranap. Pertimbangkan pendekatan alternatif jika kedalaman rekursi adalah besar secara tidak dijangka. Menggunakan ISNULL
bukannya CASE
memudahkan kod dan meningkatkan kebolehbacaan.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat Rekursi Maks SQL Server dalam CTE Rekursif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!