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

Chọn N hàng trong SQL Server

Như đã nhận xét trước đó, đó là do bạn đã đạt đến số hàng sys.columns . Đây là một cách khác để tạo danh sách các số hoặc những gì người khác gọi là Numbers Table hoặc Tally Table .

Điều này sử dụng CTE được xếp tầng s và được cho là cách nhanh nhất để tạo Bảng thống kê:

DECLARE @Range AS INT = 7374

;WITH E1(N) AS( -- 10 ^ 1 = 10 rows
    SELECT 1 FROM(VALUES (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))t(N)
),
E2(N) AS(SELECT 1 FROM E1 a CROSS JOIN E1 b), -- 10 ^ 2 = 100 rows
E4(N) AS(SELECT 1 FROM E2 a CROSS JOIN E2 b), -- 10 ^ 4 = 10,000 rows
E8(N) AS(SELECT 1 FROM E4 a CROSS JOIN E4 b), -- 10 ^ 8 = 10,000,000 rows
CteTally(N) AS(
    SELECT TOP(@Range) ROW_NUMBER() OVER(ORDER BY(SELECT NULL))
    FROM E8
)
SELECT * FROM CteTally

Bạn có thể dễ dàng thêm một CTE khác nếu bạn cần nhiều hơn 10.000 hàng.

Để biết thêm thông tin về Bảng Tally, hãy đọc bài viết tuyệt vời này của Jeff Moden.

Để so sánh hiệu suất giữa các cách tạo Bảng thống kê, hãy đọc điều này .

Giải thích lấy từ bài báo của Jeff:

CTE được gọi là E1 (như trong 10E1 cho ký hiệu khoa học) không có gì nhiều hơn mười SELECT 1 được trả về dưới dạng một tập kết quả duy nhất.

E2 thực hiện một CROSS JOIN trong tổng số E1 với chính nó. Điều đó trả về một tập hợp kết quả duy nhất gồm 10 * 10 hoặc tối đa 100 hàng. Tôi nói "tối đa" bởi vì nếu hàmTOP là 100 hoặc nhỏ hơn, CTE đủ "thông minh" để biết rằng thực sự không cần phải đi xa hơn nữa và E4E8 đã thắng cuộc. Nếu TOP có giá trị nhỏ hơn 100, không phải tất cả 100 hàng E2 có khả năng làm cho sẽ được thực hiện. Nó sẽ luôn chỉ đủ theo TOP chức năng.

Bạn có thể theo dõi từ đó. E4 là một CROSS JOIN của E2 và sẽ tạo tối đa 100 * 100 hoặc 10.000 hàng và E8 là một CROSS JOIN của E4 điều này sẽ tạo ra nhiều hàng hơn hầu hết mọi người sẽ cần. Nếu bạn đã làm nhiều hơn, thì chỉ cần thêm E16 dưới dạng CROSS JOIN của E8 và thay đổi FROM cuối cùng mệnh đề tới FROM E16 .

Điều thực sự đáng kinh ngạc về chàng trai hư này là nó được sản xuất ZEROREADS . Hoàn toàn không, nada, nil.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lập lịch chạy quy trình được lưu trữ trên máy chủ SQL

  2. Ứng dụng C # đa luồng với các lệnh gọi cơ sở dữ liệu SQL Server

  3. SQL:Mệnh đề IF trong mệnh đề WHERE

  4. Khi nào thì sắp xếp lại máy chủ SQL?

  5. Cách cài đặt SQL Server trên SUSE 12