Seperti yang dikomentari sebelumnya, itu karena Anda mencapai jumlah baris sys.columns . Berikut adalah cara lain untuk menghasilkan daftar angka atau yang orang lain sebut Numbers Table atau Tally Table .
Ini menggunakan CTE berjenjang s dan dikatakan sebagai cara tercepat untuk membuat Tabel 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
Anda dapat dengan mudah menambahkan CTE lain jika Anda membutuhkan lebih dari 10.000 baris.
Untuk informasi lebih lanjut tentang Tabel Penghitungan, baca artikel yang luar biasa ini oleh Jeff Moden.
Untuk perbandingan kinerja di antara cara menghasilkan Tabel Penghitungan, baca ini .
Penjelasan diambil dari artikel Jeff:
CTE disebut
E1(seperti dalam 10E1 untuk notasi ilmiah) tidak lebih dari sepuluhSELECT 1's dikembalikan sebagai satu set hasil.
E2melakukanCROSS JOINdariE1dengan dirinya sendiri. Itu mengembalikan satu set hasil 10*10 atau hingga 100 baris. Saya katakan "sampai" karena jika fungsi TOP 100 atau kurang, CTE cukup "pintar" untuk mengetahui bahwa itu sebenarnya tidak perlu melangkah lebih jauh danE4danE8bahkan tidak akan ikut bermain. JikaTOPmemiliki nilai kurang dari 100, tidak semua 100 baris yangE2mampu membuat akan dibuat. Itu akan selalu membuat cukup sesuai denganTOPfungsi.Anda dapat mengikuti dari sana.
E4adalahCROSS JOINdariE2dan akan membuat hingga 100*100 atau 10.000 baris danE8adalahCROSS JOINdariE4yang akan membuat lebih banyak baris daripada yang dibutuhkan kebanyakan orang. Jika Anda melakukan lebih banyak, tambahkan sajaE16sebagaiCROSS JOINdariE8dan ubahFROMterakhir klausa keFROM E16.Apa yang benar-benar menakjubkan tentang bocah nakal ini adalah menghasilkan ZEROREADS . Sama sekali tidak ada, nada, nihil.