Pertanyaan: Ambil 10 Baris TOP Tanpa Menggunakan TOP atau LIMIT?
Jawaban: Ketika saya ditanya pertanyaan ini dalam Pemeriksaan Kesehatan Kinerja Basis Data Komprehensif baru-baru ini , saya bertanya kembali kepada orang tersebut mengapa dia ingin menemukan kembali roda. Namun, ketika saya menerima jawabannya, saya sebenarnya sekarang sangat setuju dengan alasannya.
Berikut alasannya: Kami tidak ingin menggunakan TOP atau LIMIT karena sebenarnya bukan implementasi ANSI. Kami ingin mengambil baris teratas sedemikian rupa sehingga dapat bekerja di database yang berbeda seperti SQL Server, MySQL, MariaDB serta PostgreSQL.
Semua database telah menerapkan logikanya sendiri untuk mengambil baris teratas. SQL Server menggunakan TOP kata kunci sedangkan MySQL, MariaDB, dan PostgreSQL menggunakan LIMIT kata kunci untuk membatasi baris di SQL Server. Ini menghadirkan tantangan unik bagi vendor pihak ketiga yang sedang menulis kode yang dapat dicolokkan ke RDBMS mana pun. Mereka harus menulis kondisi penyihir kode dan memelihara dua versi logika yang berbeda. Namun, jika Anda menggunakan metode berikut ini akan bekerja di semua versi terbaru dari database relasional.
PILIH ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_DEFINITIONFROM (SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_DEFINITION,ROW_NUMBER() OVER (ORDER BY ROUTINE_NAME) SEBAGAI ROWNUMFROM INFORMATION_SCHEMA.ROUTINE_WHERE_PROUTINE_PER'PEUM PROCED> ROUTINE>Ini akan bekerja dengan semua database relasional yang pernah saya temui. Meskipun kami suka menggunakan TOP dan LIMIT, kami sering disarankan untuk terus menggunakan logika yang bekerja di beberapa basis data relasional.
Berikut adalah entri blog lain yang mungkin menarik bagi Anda:
- SQL SERVER – Mematikan Opsi Konfigurasi Server Peningkatan Prioritas pada SSMS 18 dan seterusnya
- SQL SERVER – Contoh Script untuk Memeriksa Fragmentasi Indeks dengan RowCount
- SQL Puzzle – Skema dan Pembuatan Tabel – Jawaban Tanpa Menjalankan Kode
- Bagaimana Mengetahui Jika Indeks Dipaksa pada Kueri? – Pertanyaan Wawancara Minggu Ini #246