Apa alternatif untuk klausa ORDER BY dalam Tampilan?

12

Pertanyaan ini harus ada di situs ini :)

ORDER BY dilarang untuk digunakan dalam tampilan, seperti yang saya mengerti karena kemungkinan untuk beberapa pesanan saat menggunakan tampilan ini.

Saya tahu bahwa ada cara untuk melewati batasan ini, misalnya TOP 99.999999 PERCENT, tetapi saya ingin tahu apa praktik terbaik, bukan bagaimana meretasnya.

Jadi, jika saya ingin membuat tampilan dalam database saya untuk penggunaan pribadi, artinya saya ingin terhubung ke database dan hanya melihat data diperbaiki dan disortir, bagaimana saya harus melakukannya jika saya tidak dapat memesan tampilan?

Saat ini di DB SQL Server saya, saya memiliki pandangan dengan TOPhack, dan saya sering menggunakannya, tapi rasanya salah.

darah kuning
sumber
1
mengapa tidak TOP 100%?
garik
@ garik - karena masih tidak menjamin pemesanan jika saya mengerti tautan gbn dengan benar. Itu hanya jawaban salah yang lebih ringkas
Jack mengatakan coba topanswers.xyz
1
@ Jack Douglas itu bukan jawaban, itu adalah komentar tentang top 99,999 ...
garik
@ garik - dalam SQL Server 2008, PERSEN 100 TOP diabaikan, dan hanya menggunakan 99 yang berfungsi. Saya pikir itu sudah diperbaiki tetapi versi saya tidak diperbarui.
yellowblood
1
Ini bukan batasan teknis. Ini dengan desain. Itu sebabnya setiap solusi terasa seperti retas. Tetapkan pemesanan Anda dalam kueri terhadap tampilan. Pesanan berlaku untuk set hasil (keluaran query ege), bukan kumpulan data (misalnya tampilan atau tabel).
Nick Chammas

Jawaban:

2

Tidak ada yang namanya tampilan "teratur" karena tampilan seharusnya adalah serangkaian baris. Gunakan prosedur tersimpan jika Anda menginginkan pemesanan tetap.

nvogel
sumber
Ini adalah jawaban yang menjelaskan mengapa Anda tidak dapat memaksakan pemesanan di dalam definisi tampilan. Satu set, menurut definisi, tidak memiliki pesanan. Ketika Anda menggabungkan TOPdengan ORDER BY, bagaimanapun, Anda sekarang mendefinisikan satu set baru karena urutan mempengaruhi baris mana yang "atas"; Inilah sebabnya mengapa TOPmemungkinkan Anda untuk menggunakan ORDER BYdefinisi tampilan.
Nick Chammas
9

Hanya ORDER BY terluar yang akan menjamin pesanan

  • Setiap ORDER OLEH perantara atau internal diabaikan.
    Ini termasuk ORDER OLEH dalam tampilan
  • Tidak ada urutan tersirat dalam tabel apa pun
  • Tidak ada urutan tersirat dari indeks apa pun (berkerumun atau tidak) pada tabel itu

Tautan

ORDER BY menjamin hasil yang diurutkan hanya untuk pernyataan SELECT terluar dari suatu permintaan. Misalnya, pertimbangkan definisi tampilan berikut: (dan contoh ikuti yang cocok dengan pertanyaan ini)

gbn
sumber
Terima kasih atas klarifikasi, tetapi itu bukan jawaban yang saya cari :) Saya mencoba untuk melihat apa jenis alternatif yang ada untuk ORDER OLEH sangat nyaman dalam tampilan.
yellowblood
3

Tambahkan ORDER BY ke output yaitu tampilan

  SELECT whatever FROM MYVIEW ORDER BY whatever
SqlACID
sumber
1
Tidak ada urutan tersirat oleh indeks berkerumun. -1.
gbn
@SqlACID - hasil edit bagus, +1 bukannya -1 :)
Jack bilang coba topanswers.xyz
Ini berarti Anda perlu menulis ulang pesanan dengan klausa setiap kali Anda menanyakan tampilan, yang kami coba hindari ketika kami menggunakan pesanan dengan di dalam tampilan.
yellowblood
seperti yang dikatakan dportas, pembungkus proc yang tersimpan di sekitar kueri akan berfungsi, tetapi mungkin bukan yang Anda cari.
SqlACID
Saya benar-benar mencoba prosedur tersimpan tetapi tidak mudah dan cukup cepat untuk meminta atau memanipulasi. Ah.
yellowblood