Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memilih Baris dengan Cekap dalam Pelayan SQL Melampaui Had Baris 7374?

Bagaimana untuk Memilih Baris dengan Cekap dalam Pelayan SQL Melampaui Had Baris 7374?

Patricia Arquette
Patricia Arquetteasal
2024-12-30 20:26:19558semak imbas

How to Efficiently Select Rows in SQL Server Beyond the 7374 Row Limit?

Memilih Baris dalam Pelayan SQL: Mengendalikan Nombor Besar Melebihi 7374 Baris

Anda mungkin menghadapi had apabila cuba mendapatkan semula baris menggunakan fungsi ROW_NUMBER daripada jadual sys.all_columns . Bermula dari 7374 baris, pertanyaan ditamatkan secara tiba-tiba. Ini kerana anda telah mencapai bilangan maksimum baris yang tersedia dalam sys.all_columns.

CTE Lata untuk Menjana Nombor Besar

Untuk mengatasi had ini, anda boleh memanfaatkan lata CTE untuk membuat "Nombor Jadual" atau "Jadual Tally." Pendekatan ini dianggap sebagai kaedah paling cekap untuk menghasilkan jadual integer berjujukan. Coretan berikut menunjukkan:

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

Penjelasan

TheCTE E1 berfungsi sebagai titik permulaan dengan sepuluh baris. CTE berikutnya (E2, E4, dan seterusnya) melakukan cantuman silang untuk mendarab bilangan baris dengan 10. Pendekatan berlatarkan ini membolehkan anda menjana sejumlah besar baris dengan cekap.

Pengelakan Ulangan Infinite

Untuk mengelakkan ralat yang berkaitan dengan pengulangan maksimum, anda boleh menentukan maksimum kedalaman rekursi 0 dalam klausa Pilihan:

OPTION (MAXRECURSION 0)

Ini mengarahkan pengoptimum pertanyaan untuk menggunakan sebarang kedalaman yang diperlukan untuk melengkapkan pelaksanaan tanpa had.

Pertimbangan Prestasi

Walaupun pendekatan rekursif adalah mudah, ia mungkin begitu lebih perlahan untuk senario tertentu. Untuk penyelesaian yang lebih optimum, pertimbangkan untuk menggunakan kaedah lain seperti berikut:

  • NUMERIC_TABLE() fungsi (Pangkalan Data SQL Azure dan SQL Server 2022 dan lebih baru)
  • Prosedur Tersimpan Rekursif (SQL Pelayan 2000 dan lebih baru)
  • Lajur Identiti dengan Benih dan Penambahan (SQL Server 2005 dan lebih baru)

Kesimpulan

Dengan memanfaatkan teknik CTE bertingkat atau meneroka kaedah alternatif, anda boleh memilih sejumlah besar baris dalam SQL dengan cekap. Pelayan, melebihi had yang dihadapi dengan jadual sys.all_columns.

Atas ialah kandungan terperinci Bagaimana untuk Memilih Baris dengan Cekap dalam Pelayan SQL Melampaui Had Baris 7374?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn