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.
E2
melakukanCROSS JOIN
dariE1
dengan 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 danE4
danE8
bahkan tidak akan ikut bermain. JikaTOP
memiliki nilai kurang dari 100, tidak semua 100 baris yangE2
mampu membuat akan dibuat. Itu akan selalu membuat cukup sesuai denganTOP
fungsi.Anda dapat mengikuti dari sana.
E4
adalahCROSS JOIN
dariE2
dan akan membuat hingga 100*100 atau 10.000 baris danE8
adalahCROSS JOIN
dariE4
yang akan membuat lebih banyak baris daripada yang dibutuhkan kebanyakan orang. Jika Anda melakukan lebih banyak, tambahkan sajaE16
sebagaiCROSS JOIN
dariE8
dan ubahFROM
terakhir klausa keFROM E16
.Apa yang benar-benar menakjubkan tentang bocah nakal ini adalah menghasilkan ZEROREADS . Sama sekali tidak ada, nada, nihil.