Announcement

Collapse
No announcement yet.

LIMIT in MSSQL

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • LIMIT in MSSQL

    Hallo zusammen,

    ich suche nun schon seit ca. 4-5 Std. nach einer Lösung für eine LIMITierung von Ergebnissen in MSSQL.
    Anscheinend gibt es soetwas, laut meiner Suche nicht in MSSQL. Ich kann mir das aber nicht vorstellen bei den Preisen für MSSQL-Server...!

    Das einzige und unsauberste was ich gefunden habe ist die Verschachtelte Variante wie z. B. diese hier:

    Code:
    SELECT TOP 2 * FROM (SELECT TOP 10 * FROM (SELECT * FROM x) AS tbl1) AS tbl2);
    Diese Zeile gibt mir 2 Datensätze der gesamten 10 zurück. Das schlägt aber sehr auf die Performance wenn es tausende Einträge werden.

    Bei mySQL gibt es dafür ja die berühmte Funktion "LIMIT x, y".

    Vielleicht gibt es hier ja jemanden der sich mit MSSQL gut auskennt und es gibt vielleicht doch eine änliche Funktion.

    Ich danke im Voraus!

    Andreas

  • #2
    nö, gibts nicht

    Comment


    • #3
      Google liefert für "microsoft sql server limit" ca. 3,5 Mio Treffer.

      Ich nutze das selbst nicht, deshalb kann ich keinen davon wirklich 'empfehlen'.

      Aber es läuft immer darauf hinaus, das aus einer irgendwie sortierten Spalte in der WHERE - Klausel selbst zu generieren.

      Grüße
      Tino
      Ich habs gleich!
      ... sagte der Programmierer.

      Comment


      • #4
        Das habe ich befürchtet!
        Es ist aber auch sehr schade, dass solch eine teuerer Datenbankserver eine so "billige" Funktion nicht bietet...

        Comment


        • #5
          Was willst du eigentlich erreichen. Ein Limit mit den 2 parameter hab ich bisher noch nicht benötigt.

          Und wenns um Preise geht:

          Kosten für ein Verteiltes Closed Source System mit einer maximalen DB-Größe von 10 GB. Wird 100* Verteilt und alle nötigen Bestandteile sollen mitgeliefert werden.

          Kosten MS SQL Server: 0 € (Express-Version)
          Kosten MySQL: ? Im Oracle-Shop gibts ein paar Preise

          Comment


          • #6
            Ich will genau das erreichen, was ich in meinem ersten Beitrag geschrieben habe...
            Ich will x Datensätze ab bestimmter Stelle auslesen.

            Mit Preisen ist gemeint, dass ein vollwertiger MSSQL-Server 2008 R2 locker mal über 1000€ kosten kann und dort wird es wohl für das Geld eine derartige Funktion geben?

            Andreas

            PS: Ich betreibe grade Crossposting! Fachinformatiker.de
            Zuletzt editiert von andy-ty; 07.06.2011, 08:10.

            Comment


            • #7
              Moin,

              dafür kann der SQL Server viele andere schöne Sachen, leider kann man halt nie alles haben.

              Wenn in deinen Tabellen nicht ständig auch gelöscht wird, dann könnte eine zusätzliche Identity - Spalte schnelle Hilfe bringen: Die Sätze werden automatisch durchnummeriert und statt LIMIT schreibst du WHERE.

              Ok, bei vielen Tabellen nicht schick.. aber wie gesagt, ich habe dieses Feature bei Desktop - Anwendungen noch nicht vermißt: aus Nutzersicht sind die Datensätze der letzten Woche viel interessanter als die letzten 100 Sätze.

              Für ein schickes Paging z.B. in einer Browser- Anwendung ist es natürlich schick, ohne Frage.

              Viel Erfolg
              Tino
              Ich habs gleich!
              ... sagte der Programmierer.

              Comment


              • #8
                Originally posted by andy-ty View Post
                Ich will genau das erreichen, was ich in meinem ersten Beitrag geschrieben habe...
                Ich will x Datensätze ab bestimmter Stelle auslesen.
                Das ist die technische Frage. Was willst du eigentlich erreichen. (Fast) Niemand wird sagen: Ich will die Datensätze 200-400 einer (hier unsortierten) Liste. I.d.R. wird es Beschränkungen wie Datum geben die man einfach in der Where-Klausel mit angeben kann.

                Oder willst du hier die fehlende unterstützung von Serverseitigen Cursern umgehen indem du jeweils neue Blöcke beim Scrollen selbst Anforderst.

                Comment


                • #9
                  Originally posted by Bernhard Geyer View Post
                  Das ist die technische Frage. Was willst du eigentlich erreichen. (Fast) Niemand wird sagen: Ich will die Datensätze 200-400 einer (hier unsortierten) Liste. I.d.R. wird es Beschränkungen wie Datum geben die man einfach in der Where-Klausel mit angeben kann.

                  Oder willst du hier die fehlende unterstützung von Serverseitigen Cursern umgehen indem du jeweils neue Blöcke beim Scrollen selbst Anforderst.
                  Nein.
                  Ich möchte meinen Server entlasten.
                  Ich will 1000 Einträge auslesen. In der Abfrage gibt es eine WHERE-Klausel.
                  Nach dem ich die 1000 Einträge verarbeitet habe, lade ich die Seite neu und muss ab dem Punkt 1001 weitere 1000 Einträge auslesen.
                  Somit sprenge ich nicht die Laufzeitbeschränkung des Scripts. Natürlich könnte ich diese höher stellen aber das ist nicht das was ich suche.

                  Comment


                  • #10
                    Originally posted by andy-ty View Post
                    Nein.
                    Ich möchte meinen Server entlasten.
                    Ich will 1000 Einträge auslesen. In der Abfrage gibt es eine WHERE-Klausel.
                    Nach dem ich die 1000 Einträge verarbeitet habe, lade ich die Seite neu und muss ab dem Punkt 1001 weitere 1000 Einträge auslesen.
                    Solange du auch nicht sortierst kannst du dir nicht sicher sein das du wirklich auch die nächsten 1000 Einträge bekommst. Es ist zwar wahrscheinlich das das so ist, aber wenn zwischenzeitlich die DB eine "reorg" durchführt wurde bzw. Datensätze gelöscht/eingefügt wurden bekommst du wieder "alte" bzw. irgendwelche Daten die gerade am "Lesekopf" der DB-Engine an der entsprechenden Position liegen.

                    Lösung:

                    1, Sortiere die Ergebnismenge
                    2, Ergänze Where-Bedingung (where sortfeld > 'letzter Wert') so das die nächsten Datensätze entsprechend kommen.

                    Comment

                    Working...
                    X