Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Mauvais ordre dans la fonction de valeur de table (conserver l'ordre d'un CTE récursif)

La bonne façon de faire votre commande est d'ajouter une clause ORDER BY à votre sélection la plus externe. Tout le reste dépend des détails de mise en œuvre qui peuvent changer à tout moment (y compris si la taille de votre base de données/tables augmente, ce qui peut permettre un traitement plus parallèle).

Si vous avez besoin de quelque chose de pratique pour permettre la commande, regardez l'exemple D dans les exemples de Page MSDN sur AVEC :

WITH DirectReports(ManagerID, EmployeeID, Title, EmployeeLevel) AS 
(
    SELECT ManagerID, EmployeeID, Title, 0 AS EmployeeLevel
    FROM dbo.MyEmployees 
    WHERE ManagerID IS NULL
    UNION ALL
    SELECT e.ManagerID, e.EmployeeID, e.Title, EmployeeLevel + 1
    FROM dbo.MyEmployees AS e
        INNER JOIN DirectReports AS d
        ON e.ManagerID = d.EmployeeID 
)

Ajoutez quelque chose de similaire à la colonne EmployeeLevel de votre CTE, et tout devrait fonctionner.