2009-08-06 3 views

Antwort

2
SELECT * 
FROM (
     SELECT TOP (Y - X) * 
     FROM (
       SELECT TOP Y * 
       FROM mytable 
       ORDER BY 
         column 
       ) q 
     ORDER BY 
       column DESC 
     ) 
ORDER BY 
     column 
+0

Oh ja - das ist besser: o) –

0

Nicht sicher, ob dies die eleganteste Lösung, aber es funktionierte für mich, als wir SQL 2000 benutzten ...

Wenn Sie eine gespeicherte Prozedur schreiben, können Sie es mit einer temporären Tabelle tun.

Erstellen Sie eine temporäre Tabelle mit einer automatisch inkrementierenden Identity-Spalte sowie den gleichen Spalten wie die Ergebnismenge.

Wählen Sie dann die Daten aus der Ergebnismenge aus und fügen Sie sie in diese temporäre Tabelle ein (in der richtigen Reihenfolge).

Schließlich Ergebnisse von Ihrer temporären Tabelle zurück, wo der Wert Ihrer Spalte Identität als Ihre Zeilennummer fungiert.

0

Sie können den Cursor auch dafür verwenden.

DECLARE @i INT 
DECLARE C CURSOR FOR 
SELECT ... FROM ... ORDER BY ... 

OPEN C 
FETCH ABSOLUTE @StartRow FROM C 
SET @i = 1 
WHILE (@@FETCH_STATUS == 0) AND (@i < @EndRow - @StartRow) BEGIN 
    -- Do whatever you need 
    FETCH NEXT FROM C 
END 
CLOSE C 
DEALLOCATE C 

Das einzige Problem hier ist, dass jede Zeile als separate Ergebnismenge zurückgegeben wird, aber es macht den Job.