Announcement

Collapse
No announcement yet.

select .... limit x,y in MS SQL?

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

  • select .... limit x,y in MS SQL?

    In MySQL gibt's eine geschickte Erweiterung zum select-Befehl, wo ich mit limit 20,30 zum Beispiel vom 20. Datensatz beginnend die nächsten 30 Datensätze auslesen kann. Allerdings ist das leider eine Eigenheit von MySQL und in anderen Datenbanken nicht vorhanden.

    Wie kann ich am einfachsten dasselbe im SQL Server erreichen? Ich kenne zwar select TOP x, aber da bekomme ich ja immer nur die ersten x Datensätze und keine dazwischen. Über Cursor lässt sich das Problem auch einigermaßen lösen, ist aber sehr umständlich. Gibt's da nichts einfacheres?

    Danke!

  • #2
    Hallo,

    mit dem Umweg über eine temporäre Hilfstabelle (die der MS SQL Server am Session-Ende automatisch wieder entsorgt) gibt es in der Tat einen Weg, um das Ziel ohne CURSOR zu erreichen:

    Schritt 1: Die Datensätze der Ergebnismenge werden in der benötigten ORDER BY-Reihenfolge über die IDENTITY-Funktion durchnummeriert und in einer temporären Tabelle (<b>#</b> als erstes Zeichen des Tabellennamens) abgelegt:
    <pre>
    SELECT IDENTITY(INT,1,1) AS RowNumber, *
    INTO #TmpCustomerTbl
    FROM Customers
    GO
    </pre>
    Schritt 2: Eine BETWEEN-Einschränkung für die Datensatznummern schränkt die Ergebnismenge bei der Abfrage der temporären Tabelle ein:
    <pre>
    SELECT * FROM #TmpCustomerTbl
    WHERE RowNumber BETWEEN 20 AND 50
    GO
    </pre>
    Mit diesen zwei Schritten baut man das nach, was auch MySQL hinter den Kulissen macht ;-

    Comment


    • #3
      Das klingt plausibel ;-)! Danke!

      Müßte man ja eigentlich auch ein Stored Procedure programmieren können, das einem das alles vollautomatisch macht?!

      Comment


      • #4
        Hallo,

        &gt;..auch ein Stored Procedure programmieren können, das einem das alles vollautomatisch macht.

        Normalerweise wird der Schritt 1 nur einmalig ausgeführt, aber der Schritt 2 mit geänderten Bereichsgrenzen mehrfach genutzt. Wenn allerdings auch der Schritt 2 nur einmal aufgerufen werden muss, kann alles in eine SP verpackt werden

        Comment


        • #5
          Ist klar, weil die temporäre Tabelle bleibt enthalten ;-). Kann man dann entscheiden, ob man das SP nur zur Ausgabe nutzen möchte, dann könnte man die temp. Tabelle nach der Ausgabe gleich löschen, oder man läßt die temp. Tabelle gleich und kann sie immer wieder benutzen.

          Ich werd jedenfalls versuchen, mit so 'ne SP zu erstellen ;-)

          Comment

          Working...
          X