Welche Alternativen gibt es für eine ORDER BY-Klausel in einer View?


12

Diese Frage musste nur auf dieser Seite stehen :)

Es ist verboten, ORDER BY in einer Ansicht zu verwenden, da bei Verwendung dieser Ansicht mehrere Order Bys möglich sind.

Ich weiß, dass es zum Beispiel Möglichkeiten gibt, diese Einschränkung zu umgehen TOP 99.999999 PERCENT, aber ich möchte wissen, was die beste Vorgehensweise ist und nicht, wie man sie hackt.

Wenn ich also Ansichten für den persönlichen Gebrauch in meiner Datenbank erstellen möchte, das heißt, ich möchte eine Verbindung zur Datenbank herstellen und nur die festen und sortierten Daten anzeigen, wie soll ich das tun, wenn ich keine Ansicht bestellen kann?

Derzeit habe ich in meiner SQL Server-Datenbank Aufrufe mit dem TOPHack, und ich verwende sie häufig, aber es fühlt sich falsch an.


1
warum nicht TOP 100%?
Garik

@garik - weil es die Bestellung immer noch nicht garantiert , wenn ich den Link von gbn richtig verstehe. Es ist nur eine prägnantere falsche Antwort
Jack sagt, versuchen Sie topanswers.xyz

1
@ Jack Douglas es war keine Antwort, es war ein Kommentar zu den Top 99.999 ...
Garik

@garik - In SQL Server 2008 werden die TOP 100-PROZENTSÄTZE ignoriert, und nur die Verwendung von 99 funktioniert. Ich denke, es wurde behoben, aber meine Version ist nicht aktualisiert.
Gelbblut

1
Dies ist keine technische Einschränkung. Dies ist beabsichtigt. Aus diesem Grund fühlt sich jede Problemumgehung wie ein Hack an. Setzen Sie Ihre Bestellung in den Abfragen gegen die Ansichten. Eine Bestellung bezieht sich auf eine Ergebnismenge (e.ge query output), nicht auf eine Sammlung von Daten (z. B. eine Ansicht oder eine Tabelle).
Nick Chammas

Antworten:


2

Es gibt keine "geordnete" Ansicht, da eine Ansicht eine Reihe von Zeilen sein soll. Verwenden Sie eine gespeicherte Prozedur, wenn Sie eine feste Bestellung wünschen.


Dies ist die Antwort, die erklärt, warum Sie in einer Ansichtsdefinition keine Reihenfolge festlegen können. Eine Menge hat per Definition keine Reihenfolge. Wenn Sie kombinieren TOPmit ORDER BY, jedoch werden Sie nun einen neuen Satz definieren , da die Ordnung sind „oben“ die Zeilen auswirkt; Aus diesem Grund TOPkönnen Sie sie ORDER BYin einer Ansichtsdefinition verwenden.
Nick Chammas

9

Nur das äußerste ORDER BY garantiert die Bestellung

  • Alle zwischengeschalteten oder internen ORDER BY werden ignoriert.
    Dies schließt ORDER BY in einer Ansicht ein
  • In keiner Tabelle ist eine implizite Reihenfolge enthalten
  • Es gibt keine implizite Reihenfolge von einem Index (gruppiert oder nicht) für diese Tabelle

Links

ORDER BY garantiert ein sortiertes Ergebnis nur für die äußerste SELECT-Anweisung einer Abfrage. Betrachten Sie beispielsweise die folgende Ansichtsdefinition: (und das folgende Beispiel entspricht dieser Frage.)


Vielen Dank für die Klarstellung, aber es ist nicht die Antwort, die ich gesucht habe :) Ich versuche zu sehen, welche Alternativen es für die sehr bequeme BESTELLUNG VON innerhalb einer Ansicht gibt.
Gelbblut

3

Fügen Sie der Ausgabe der Ansicht ein ORDER BY hinzu, z

  SELECT whatever FROM MYVIEW ORDER BY whatever

1
Es gibt keine implizite Reihenfolge nach Clustered-Index. -1.
21.07.11

@SqlACID - gute Bearbeitung, +1 statt -1 :)
Jack sagt, versuchen Sie topanswers.xyz

Dies bedeutet, dass Sie die order by -Klausel jedes Mal neu schreiben müssen, wenn Sie die Ansicht abfragen. Dies möchten wir vermeiden, wenn wir die Reihenfolge innerhalb der Ansicht verwenden.
Gelbblut

Wie dportas sagte, würde ein gespeicherter Proc-Wrapper um die Abfrage funktionieren, aber wahrscheinlich nicht das, wonach Sie suchen.
SqlACID

Ich habe tatsächlich eine gespeicherte Prozedur ausprobiert, aber es war nicht einfach und schnell genug, sie abzufragen oder zu manipulieren. Meh.
Gelbblut
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.