Bir Görünümde ORDER BY deyiminin alternatifleri nelerdir?


12

Bu soru sadece bu sitede olmalı :)

SİPARİŞ TARAFINDAN bir görünümde kullanılması yasaktır, çünkü anladığım kadarıyla, bu görünümü kullanırken birden fazla sıraya girme olasılığı.

Örneğin TOP 99.999999 PERCENT, bu sınırlamayı aşmanın yolları olduğunu biliyorum , ama en iyi uygulamanın ne olduğunu bilmek istiyorum, nasıl hackleneceğini değil.

Yani, kişisel kullanım için veritabanımda görünümler oluşturmak istiyorsanız, yani veritabanına bağlanmak ve sadece sabit ve sıralanmış verileri görmek istiyorum, bir görünüm sipariş edemezsem nasıl yapmalıyım?

Şu anda benim SQL Server DB TOPkesmek ile görüş var ve onları çok kullanıyorum, ama yanlış geliyor.


1
neden TOP 100% olmasın?
garik

@garik - çünkü gbn'nin bağlantısını doğru anlarsam siparişi hala garanti etmez . Bu sadece daha kısa bir yanlış cevap
Jack denemek topanswers.xyz diyor

1
@Jack Douglas bir cevap değildi, üst 99.999 hakkında bir yorum oldu ...
garik

@garik - SQL Server 2008'de TOP 100 PERCENT yoksayılır ve yalnızca 99 kullanılarak çalışır. Bence düzeltildi ama sürümüm güncellenmedi.
yellowblood

1
Bu teknik bir sınırlama değildir. Bu tasarım gereğidir. Bu yüzden herhangi bir çözüm bir kesmek gibi geliyor. Görünümlere karşı sorgulamalarda empoze et. Bir sipariş, veri kümesine (örneğin bir görünüm veya tablo) değil, bir sonuç kümesine (e.ge sorgu çıktısı) uygulanır.
Nick Chammas

Yanıtlar:


2

"Sıralı" görünüm diye bir şey yoktur, çünkü bir görünümün bir dizi satır olması gerekiyordu. Sabit bir sipariş istiyorsanız saklı bir prosedür kullanın.


Bu, bir görünüm tanımının içine neden sipariş veremeyeceğinizi açıklayan cevaptır . Bir kümenin tanım gereği bir sırası yoktur. Eğer birleştirdiğinizde TOPile ORDER BYsipariş etkilediğinden, ancak, şimdi yeni bir dizi tanımlıyorsanız hangi satırların "top" dir; bu yüzden bir görünüm tanımında TOPkullanabilmenizi sağlar ORDER BY.
Nick Chammas

9

Siparişi yalnızca en dıştaki SİPARİŞ TARAFINDAN garanti eder

  • Herhangi bir ara veya dahili ORDER BY dikkate alınmaz.
    Buna bir görünümde ORDER BY dahildir
  • Hiçbir tabloda zımni emir yoktur
  • Bu tablodaki herhangi bir dizinden (kümelenmiş veya eklenmemiş) herhangi bir zımni sipariş yoktur

Bağlantılar

ORDER BY, bir sorgunun yalnızca en dıştaki SELECT deyimi için sıralanmış bir sonucu garanti eder. Örneğin, aşağıdaki görünüm tanımını göz önünde bulundurun: (ve bu soruyla eşleşen örneği izleyin)


Açıklama için teşekkürler, ama aradığım cevap değil :) Bir görünüm içinde çok uygun SİPARİŞ için ne tür alternatifler olduğunu görmeye çalışıyorum.
yellowblood

3

Görünümün çıktısına SİPARİŞ BY ekleyin

  SELECT whatever FROM MYVIEW ORDER BY whatever

1
Kümelenmiş dizin tarafından herhangi bir zımni sıra yoktur. -1.
gbn

@SqlACID - iyi düzenleme, -1 yerine +1 :)
Jack diyor denemek topanswers.xyz

Bu, görünümü her sorguladığınızda sırayı cümle ile yeniden yazmanız gerektiği anlamına gelir; bu, görünümü görünüm içinde kullandığımızda kaçınmaya çalıştığımız şeydir.
yellowblood

dportas'ın dediği gibi, sorgunun etrafında saklanan bir proc sarmalayıcısı işe yarayacaktı, ancak muhtemelen aradığınız şey değil.
SqlACID

Aslında saklı yordamı denedim ama sorgulamak veya manipüle etmek kolay ve hızlı değildi. Meh.
yellowblood
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.