Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Ordem errada na função com valor de tabela (manter a ordem de um CTE recursivo)


A maneira correta de fazer seu ORDERing é adicionar uma cláusula ORDER BY à sua seleção mais externa. Qualquer outra coisa depende de detalhes de implementação que podem mudar a qualquer momento (incluindo se o tamanho do seu banco de dados/tabelas aumentar, o que pode permitir que ocorra mais processamento paralelo).

Se você precisar de algo conveniente para permitir que o pedido ocorra, consulte o Exemplo D nos exemplos do página MSDN em COM :
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 
)

Adicione algo semelhante à coluna EmployeeLevel do seu CTE e tudo deve funcionar.