Saya punya pertanyaan ini dengan MySQL:
select * from table1 LIMIT 10,20
Bagaimana saya bisa melakukan ini dengan SQL Server?
sql
sql-server
migration
Bigballs
sumber
sumber
Jawaban:
Mulai SQL SERVER 2005, Anda dapat melakukan ini ...
atau sesuatu seperti ini untuk versi 2000 dan di bawah ...
sumber
Kikuk, tapi itu akan berhasil.
Penghapusan klausa LIMIT MSSQL adalah kriminal, IMO. Anda tidak harus melakukan penyelesaian seperti ini.
sumber
Dimulai dengan SQL SERVER 2012, Anda dapat menggunakan OFFSET FETCH Clause:
http://msdn.microsoft.com/en-us/library/ms188385(v=sql.110).aspx
Ini mungkin tidak berfungsi dengan benar ketika pesanan oleh tidak unik.
Jika kueri diubah menjadi ORDER BY OrderDate, hasil yang dikembalikan tidak seperti yang diharapkan.
sumber
Ini hampir merupakan duplikat dari pertanyaan yang saya ajukan pada bulan Oktober: Meniru klausa LIMIT MySQL di Microsoft SQL Server 2000
Jika Anda menggunakan Microsoft SQL Server 2000, tidak ada solusi yang baik. Sebagian besar orang harus menggunakan untuk menangkap hasil kueri dalam tabel sementara dengan
IDENTITY
kunci utama. Kemudian kueri terhadap kolom kunci utama menggunakanBETWEEN
kondisi.Jika Anda menggunakan Microsoft SQL Server 2005 atau lebih baru, Anda memiliki
ROW_NUMBER()
fungsi, sehingga Anda bisa mendapatkan hasil yang sama tetapi menghindari tabel sementara.Anda juga dapat menulis ini sebagai ekspresi tabel umum seperti yang ditunjukkan pada jawaban @Leon Tayson .
sumber
Ini adalah bagaimana saya membatasi hasil dalam MS SQL Server 2012:
CATATAN:
OFFSET
hanya dapat digunakan dengan atau bersama-sama denganORDER BY
.Untuk menjelaskan baris kode
OFFSET xx ROWS FETCH NEXT yy ROW ONLY
Ini
xx
adalah nomor record / baris yang ingin Anda tarik dari dalam tabel, yaitu: Jika ada 40 catatan dalam tabel 1, kode di atas akan mulai menarik dari baris 10.The
yy
adalah jumlah record / baris Anda ingin menarik dari meja.Untuk membangun contoh sebelumnya: Jika tabel 1 memiliki 40 catatan dan Anda mulai menarik dari baris 10 dan ambil set NEXT dari 10 (
yy
). Itu berarti, kode di atas akan menarik catatan dari tabel 1 mulai dari baris 10 dan berakhir pada 20. Dengan demikian menarik baris 10 - 20.Lihat tautan untuk info lebih lanjut tentang OFFSET
sumber
sumber
Permintaan MySQL LIMIT secara sintaksis adalah seperti ini:
Ini dapat diterjemahkan ke dalam Microsoft SQL Server seperti
Sekarang permintaan Anda
select * from table1 LIMIT 10,20
akan seperti ini:sumber
Ini adalah salah satu alasan saya mencoba untuk menghindari menggunakan MS Server ... tetapi tetap. Kadang-kadang Anda tidak memiliki opsi (yei! Dan saya harus menggunakan versi yang sudah usang !!).
Saran saya adalah membuat tabel virtual:
Dari:
Untuk:
Maka cukup kueri:
Jika bidang ditambahkan, atau dihapus, "baris" diperbarui secara otomatis.
Masalah utama dengan opsi ini adalah bahwa ORDER BY sudah diperbaiki. Jadi jika Anda menginginkan urutan yang berbeda, Anda harus membuat tampilan lain.
MEMPERBARUI
Ada masalah lain dengan pendekatan ini: jika Anda mencoba memfilter data Anda, itu tidak akan berfungsi seperti yang diharapkan. Misalnya, jika Anda melakukannya:
DI MANA menjadi terbatas pada data yang berada di baris antara 10 dan 20 (alih-alih mencari seluruh dataset dan membatasi output).
sumber
Ini adalah pendekatan multi langkah yang akan bekerja di SQL2000.
sumber
sumber
Harus dicoba. Di kueri di bawah ini, Anda bisa melihat grup berdasarkan, pesan berdasar, Lewati baris, dan bataskan baris.
sumber
Sama dengan
Inilah artikel tentang menerapkan Batas dalam MSSQL. Ini adalah bacaan yang bagus, khususnya komentar.
sumber
Di SQL tidak ada kata kunci LIMIT. Jika Anda hanya membutuhkan jumlah baris terbatas, Anda harus menggunakan kata kunci TOP yang mirip dengan LIMIT.
sumber
Jika ID Anda adalah tipe pengidentifikasi unik atau id dalam tabel Anda tidak diurutkan, Anda harus melakukan seperti ini di bawah ini.
Kodenya akan
sumber
--Memberikan Kolom [Hitungan] dan menugaskan setiap baris penghitungan unik tanpa memesan sesuatu lalu pilih kembali di mana Anda dapat memberikan batasan Anda .. :)
sumber
Salah satu cara yang mungkin untuk mendapatkan hasil seperti di bawah ini, harap ini akan membantu.
sumber
Jalan mudah
MYSQL:
MSSQL:
ORDER BY wajib diisi
sumber
Jika saya ingat dengan benar (sudah lama sejak saya mengoleskan SQL Server), Anda mungkin dapat menggunakan sesuatu seperti ini: (2005 dan lebih tinggi)
sumber
WHERE
alias yang ditentukan dalamSELECT
klausa level yang sama .