Menerap Fungsi LIMIT MySQL dalam Microsoft SQL Server 2000
KlausaMySQL LIMIT
memudahkan mendapatkan semula bilangan baris tertentu. SQL Server 2000 tidak mempunyai persamaan langsung, yang memerlukan penyelesaian. Berikut adalah beberapa kaedah untuk mencapai hasil yang serupa:
Kaedah 1: Pertanyaan Bersarang (SQL Server 2000)
Pendekatan ini menggunakan pernyataan SELECT
bersarang untuk menapis baris dalam julat yang ditentukan:
<code class="language-sql">SELECT TOP 25 * FROM ( SELECT TOP 75 * FROM table ORDER BY field ASC ) a ORDER BY field DESC;</code>
Ini mendapatkan semula baris 26-75 selepas membuat pesanan oleh field
. Nota: Kaedah ini kurang cekap untuk set data yang besar dan tidak mengendalikan senario bukan berbilang halaman dengan anggun untuk halaman terakhir.
Kaedah 2: Memanfaatkan Lajur Unik (SQL Server 2000)
Jika jadual anda mempunyai lajur unik (cth., kunci utama), teknik ini mengecualikan baris yang telah dipilih:
<code class="language-sql">SELECT TOP n * FROM tablename WHERE key NOT IN ( SELECT TOP x key FROM tablename ORDER BY key );</code>
Ini memilih n
baris, tidak termasuk baris x
atas, disusun mengikut lajur key
. Ini juga kurang cekap untuk meja besar.
Kaedah 3: Menggunakan ROW_NUMBER() (SQL Server 2005 dan kemudian)
Untuk SQL Server 2005 dan ke atas, fungsi ROW_NUMBER()
menyediakan penyelesaian yang lebih elegan:
<code class="language-sql">SELECT z2.* FROM ( SELECT ROW_NUMBER() OVER (ORDER BY id) AS rownum, z1.* FROM ( ...original SQL query... ) z1 ) z2 WHERE z2.rownum BETWEEN @offset + 1 AND @offset + @count;</code>
Ini memberikan nombor baris pada setiap hasil dan kemudian menapis berdasarkan offset yang ditentukan (@offset
) dan kiraan (@count
). Ini biasanya kaedah yang paling cekap dan fleksibel untuk versi SQL Server yang lebih baharu.
Kaedah 4: KECUALI Penyata (SQL Server 2005 dan kemudian)
Pilihan lain untuk SQL Server 2005 dan kemudian menggunakan operator set EXCEPT
:
<code class="language-sql">SELECT * FROM ( SELECT TOP 75 COL1, COL2 FROM MYTABLE ORDER BY COL3 ) AS foo EXCEPT SELECT * FROM ( SELECT TOP 50 COL1, COL2 FROM MYTABLE ORDER BY COL3 ) AS bar;</code>
Ini memilih baris 51-75 selepas membuat pesanan dengan COL3
. Sama seperti pendekatan ROW_NUMBER()
, ini adalah penyelesaian yang lebih cekap untuk versi SQL Server yang lebih baharu. Walau bagaimanapun, ia kurang intuitif daripada ROW_NUMBER()
untuk senario yang kompleks. Pilih kaedah yang paling sesuai dengan versi SQL Server dan saiz set data anda.
Atas ialah kandungan terperinci Bagaimana untuk meniru Klausa LIMIT MySQL dalam Microsoft SQL Server 2000?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!