Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Thứ tự sai trong Hàm có giá trị bảng (giữ thứ tự của một CTE đệ quy)

Cách chính xác để thực hiện ĐẶT HÀNG của bạn là thêm mệnh đề ORDER BY vào lựa chọn ngoài cùng của bạn. Bất kỳ điều gì khác đều dựa vào chi tiết triển khai có thể thay đổi bất kỳ lúc nào (bao gồm nếu kích thước cơ sở dữ liệu / bảng của bạn tăng lên, điều này có thể cho phép nhiều xử lý song song hơn xảy ra).

Nếu bạn cần thứ gì đó thuận tiện để cho phép việc đặt hàng diễn ra, hãy xem Ví dụ D trong các ví dụ từ Trang MSDN trên WITH :

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 
)

Thêm một cái gì đó tương tự vào cột EmployeeLevel vào CTE của bạn và mọi thứ sẽ hoạt động.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL. SP hoặc hàm sẽ tính toán ngày tiếp theo cho thứ sáu

  2. Khôi phục giao dịch bên trong của giao dịch lồng nhau

  3. Câu lệnh Delete trong SQL rất chậm

  4. Tại sao NULL =NULL đánh giá thành false trong máy chủ SQL

  5. Giá trị hiệu suất của COMB guids