Dalam Pelayan SQL, memilih bilangan baris tertentu boleh dicapai menggunakan fungsi ROW_NUMBER(). Walau bagaimanapun, terdapat pengehadan kepada bilangan baris yang boleh dikembalikan.
Pertanyaan awal yang diberikan tidak menyatakan jadual tertentu untuk memilih baris. Apabila melaksanakan pertanyaan ini terhadap sys.all_columns, ia hanya akan mengembalikan sehingga 7374 baris kerana itu ialah jumlah bilangan baris dalam jadual itu.
Untuk memilih bilangan baris yang lebih besar , kaedah alternatif boleh digunakan:
Menggunakan Nombor Jadual:
DECLARE @start INT = 1; DECLARE @end INT = 10; WITH numbers AS ( SELECT @start AS number UNION ALL SELECT number + 1 FROM numbers WHERE number < @end ) SELECT * FROM numbers OPTION (MAXRECURSION 0);
Dengan menggunakan Jadual Nombor, bilangan baris yang tidak terhingga boleh dijana. Walau bagaimanapun, pendekatan ini boleh menjadi agak perlahan.
Untuk prestasi yang lebih baik, CTE cascaded boleh digunakan untuk mencipta Jadual Tally:
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
Pendekatan ini mampu menjana sejumlah besar baris dengan bacaan sifar. Untuk lebih banyak perbandingan prestasi dan butiran tambahan tentang Jadual Tally, rujuk pautan yang disediakan dalam jawapan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memilih Bilangan Baris Tertentu dalam Pelayan SQL dengan Cekap, Walaupun Melampaui Had sys.all_columns?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!