
Conquérir la limite de récursion de SQL Server dans les CTE récursifs
Lorsque vous travaillez avec des expressions de table communes (CTE) récursives dans SQL Server, vous pouvez rencontrer la redoutable erreur « profondeur de récursion maximale dépassée ». Cela se produit lorsque vos requêtes récursives imbriquées dépassent la limite prédéfinie de la base de données.
La solution consiste à utiliser l'option maxrecursion :
Voici comment modifier votre requête pour résoudre ce problème :
<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>En ajoutant OPTION (MAXRECURSION 0), vous éliminez efficacement la limite de récursion, permettant à la requête de s'exécuter indéfiniment. Soyez cependant prudent lorsque vous utilisez MAXRECURSION 0. Assurez-vous que votre logique CTE est correcte pour éviter les boucles infinies qui pourraient entraîner des problèmes de performances ou des plantages. Envisagez des approches alternatives si la profondeur de récursion est étonnamment grande. Utiliser ISNULL au lieu de CASE simplifie le code et améliore la lisibilité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!
Le numéro de page Word commence à partir de la troisième page comme 1 tutoriel
Trois méthodes d'encodage couramment utilisées
Utilisation de la fonction accepter
Quels sont les moteurs de workflow Java ?
Comment lier des données dans une liste déroulante
Que sont les logiciels de programmation en langage C ?
Qu'est-ce que CONNECTION_REFUSED ?
Comment résoudre 400 mauvaises requêtes