2012-04-08 28 views
38

SQL sau đây là từ Itzik Ben-Gan được sử dụng để tạo ra một bảng số. Phần order by (select null) có nghĩa là gì? Cảm ơn."ORDER BY (SELECT NULL)" có nghĩa là gì?

DECLARE @number_of_numbers INT; 
SELECT @number_of_numbers = 100000; 

WITH a AS (SELECT 1 AS i 
       UNION ALL 
       SELECT 1 
      ), 
     b AS (SELECT 1 AS i 
       FROM  a AS x , 
         a AS y 
      ), 
     c AS (SELECT 1 AS i 
       FROM  b AS x , 
         b AS y 
      ), 
     d AS (SELECT 1 AS i 
       FROM  c AS x , 
         c AS y 
      ), 
     e AS (SELECT 1 AS i 
       FROM  d AS x , 
         d AS y 
      ), 
     f AS (SELECT 1 AS i 
       FROM  e AS x , 
         e AS y 
      ), 
     numbers 
      AS (SELECT TOP (@number_of_numbers) 
         ROW_NUMBER() OVER (ORDER BY (SELECT NULL 
                )) AS number 
       FROM  f 
      ) 
    SELECT * 
    FROM numbers; 

Cảm ơn!

Trả lời

62

ROW_NUMBER yêu cầu mệnh đề ORDER BY theo cú pháp. Bạn không thể sử dụng nó mà không có một. SELECT NULL là lỗi để đóng lỗi khi không thực thi bất kỳ thứ tự cụ thể nào. Trong trường hợp này, chúng tôi không cần thực thi bất kỳ thứ tự nào, vì vậy tùy chọn nhanh nhất là sử dụng SELECT NULL.

Trình tối ưu hóa xem qua thủ thuật này, vì vậy trình tối ưu hóa không có chi phí thời gian chạy (xác nhận quyền sở hữu này được xác minh dễ dàng bằng cách xem kế hoạch thực hiện).

+12

Nó cũng có thể được sử dụng như một tuyên bố về ý định khi nó không thực sự được yêu cầu. Ví dụ, trong cuốn sách tập huấn của Micrsoft "Truy vấn Microsoft SQL Server 2012", họ khuyên bạn nên thêm nó vào truy vấn hợp lệ, "... nếu bạn thực sự sau ba hàng tùy ý, bạn nên thêm một ORDER Mệnh đề BY với biểu thức (SELECT NULL) để cho mọi người biết rằng lựa chọn của bạn là có chủ ý và không phải là một sự giám sát. " –