Ich weiß nichts über ibatis, aber ich denke, Sie könnten dies in SQL tun.
Wenn ich Sie richtig verstehe, möchten Sie paginate die Ergebnisse einer Auswahlanweisung oder Vereinigung einiger select-Anweisungen erhalten.
Ich würde es folgendermaßen tun. Dies könnte zum Beispiel eine gespeicherte Prozedur sein, und es sollte wahrscheinlich eine gewisse Plausibilitätsprüfung geben. Überprüfen Sie, ob die Werte von Offset und Limit größer als 0 sind. Wenn Sie etwas so tun, ersetzen Sie *
durch Ihre Spalte Namen auch! Hier
ist ein Beispiel mit einer Gewerkschaft:
DECLARE @offset INT;
DECLARE @limit INT;
WITH cte
AS (SELECT t.*,
Row_number() OVER (ORDER BY Id) AS RowNum
FROM (SELECT *
FROM Table1
UNION
SELECT *
FROM Table2) t)
SELECT *
FROM cte
WHERE RowNum BETWEEN @offset AND @offset + @limit
Wesentliches, was ich getan habe, abgeleitet wird eine neue Tabelle aus der Vereinigung von zwei Abfragen, wie Sie in Ihrem Fall passieren sagen können. Ich füge dann eine Spalte mit der Zeilennummer zu dem Ergebnis davon in einem CTE hinzu, dann nur die Zeilen auswählend, die in @Offset
und @limit + @offset
spezifiziert wurden, um nur die Reihen zurückzubekommen, die du verlangst.
z. Einstellen @offset = 50
und @limit = 50
, dann würden Sie Ergebnisse 50-100 zurück (wie durch die Kriterien in der Row_number
über Klausel angegeben bestellt.
(Ich hoffe, das die Art der Sache war die Sie gesucht haben!)
Bearbeiten: Dies funktioniert nur in SQL Server 2005 - Sie haben nicht erwähnt, welche Version Sie verwenden!
Wie kann ich die Gesamtzahl der Zeilen erhalten? – Victor
Wählen Sie aus dem CTE entweder zählen (*) 'oder' Max (RowNum) ... ' – Bridge