mssql: workaround für LIMIT ?

  • moin,

    ich bin LIMIT von mysql gewöhnt und irgendwie gibts ja sowas in mssql nicht.
    wie kann ich also zb 50 einträge aus der mitte tabelle herausholen ?
    TOP liefert ja nur den anfang, mit where möchte ich es eigentlich nicht begrenzen, da dies ja eher nicht konkret sein kann oder?

    danke
    thomas

  • Naja, ich kann Dir nur ein work-around anbieten (anhand eines Beispiels):

    SELECT * FROM (
    SELECT TOP [OG-UG+1] * FROM (
    SELECT TOP [OG] [Spalte1, Spalte2, ...]
    FROM [Tabelle]
    ORDER BY [key] ASC
    ) ORDER BY [key] DESC
    ) ORDER BY [key] ASC

    Tabelle (ID, Text):
    1, AAA
    2, BBB
    3, CCC
    4, DDD
    5, EEE

    => zB Datensätze 2-4 sind interessant nach ID sortiert
    SELECT * FROM (
    SELECT TOP 3 * FROM (
    SELECT TOP 4 ID, Text
    FROM tabelle_test
    ORDER BY ID ASC
    ) ORDER BY ID DESC
    ) ORDER BY ID ASC

    1.) bei der innersten SELECT-Anweisung (SELECT TOP 4 ID, Text FROM tabelle_test ORDER BY ID ASC) kommt das heraus

    1, AAA
    2, BBB
    3, CCC
    4, DDD

    2.) dann die zweite SELECT ANWEISUNG (SELECT TOP 3 * FROM (....) ORDER BY ID DESC) liefert folgendes

    4, DDD
    3, CCC
    2, BBB

    3.) und das ganze jetzt nochmal umdrehen (SELECT * FROM (....(....)....) ORDER BY ID ASC)!

    Es ginge natürlich auch mit nur 2 Abfragen, allerdings müsste man dafür die Anzahl der Datensätze wissen

    mfg
    mas

    [edit]
    Solltest Du "LIMIT" allerdings dazu verwenden wollen um die Belastung des SQL-Servers zu verringern - in diesem Fall geht der Schuss natürlich nach hinten los, da Du ja 3 SELECT-Abfragen in diesem workaround verwendest
    [/edit]

  • hehe ja eigentlich wars für die reduzierung der serverlast gedacht ;))
    trotzdem vielen dank für die anweisungen!
    werd mal testen wie schnell/langsam die sind,

    mfg
    thomas

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!