Saya mengizinkan pengguna akhir untuk menentukan berapa banyak baris yang dikembalikan oleh permintaan (SELECT TOP (@x)). Apakah ada nilai yang bisa dimasukkan di mana semua baris dikembalikan? Atau apakah saya harus secara dinamis membuat kueri tanpa TOP (@x) jika mereka ingin semua baris dikembalikan?
Saya menggunakan SQL Server 2012.
sql-server
Wayne E. Pfeffer
sumber
sumber
TOP ... ORDER BY
sesuatu? ApakahORDER BY
sesuatu masih diperlukan jika Anda memilih semua?TOP
keluar dari pertanyaan? Seperti Anda berurusan dengan beberapa permintaan yang telah ditentukan dan Anda harus memberikannya sesuatu ?Jawaban:
Yah, sepertinya TOP adalah BIGINT jika Anda tidak menggunakan PERCENT . Itu berarti Anda bisa memberikan nilai maksimum BIGINT ,
Aku benar-benar ragu kau akan melihat meja sebesar itu. Saya tidak yakin apa efek yang akan terjadi pada rencana kueri.
sumber
@x
adalah BIGINT makaSET @x = 0x7fffffffffffffff
mungkin lebih jelas bagi sebagian orang. Lebih mudah diingat.7
dan kemudian sisanya adalahF
dan Anda membutuhkan total 16 karakter untuk 8 byte. Dan ya itu akan dikonversi secara implisit jika menugaskan ke variabel tipe data itu.0x7fffffffffffffff
representasi nilai maksimalbigint
di SqlServer. Alasannya adalah bahwa dalam notasi konstanta biner SqlServer yang Anda miliki7f
dalam byte terendah , sedangkan dalam bahasa seperti c ++ Anda memilikinya dalam byte tertinggi untuk mendapatkan maks dari tipe integral yang ditandatangani.Anda juga bisa mempertimbangkannya
Dari pada
Nilai yang Anda perlukan untuk mengatur @x adalah
0
untuk menonaktifkannya.Ini tidak digunakan lagi untuk pernyataan modifikasi data tetapi tidak usang untuk
SELECT
.Pada 2012 sebuah rencana berbeda dikompilasi untuk case yaitu
ROWCOUNT
0 vs beberapa nilai bukan nol.Jika
ORDER BY Baz
hanya ada di sana untuk memberi makna kepadaTOP
daripada memberikan urutan presentasi untuk hasil dan Anda tidak memiliki indeks yang mendukung ini maka membaginya menjadi dua pertanyaan akan menghindari jenis yang tidak perlu dalam0
kasus ini.sumber
SELECT TOP 100 PERSEN dapat digunakan untuk memotong kesalahan dengan menggunakan "TOP" dalam permintaan.
sumber
sumber
@x
) di sana, dan mereka sekarang menanyakan nilai apa yang harus diteruskan@x
sehingga itu berarti "semua baris" terlepas dari berapa banyak baris yang sebenarnya dimiliki tabel. Mungkin Anda bisa mencari tahu bagaimana menyesuaikan solusi Anda agar sesuai dengan persyaratan OP.(SELECT COUNT(*) FROM YourTable)
bukan nilai.