No sé nada de ibatis, pero supongo que se puede hacer esto en SQL.
Si le entiendo correctamente, quiere obtener los resultados de una declaración seleccionada o unión de unas pocas declaraciones seleccionadas.
Lo haría de la siguiente manera. Esto podría ser un procedimiento almacenado, por ejemplo, y probablemente debería haber alguna comprobación de cordura allí donde los valores de compensación y límite sean mayores que 0. Si terminas haciendo algo como esto, asegúrate de reemplazar *
con tu columna nombres también!
Aquí se muestra un ejemplo con un sindicato:
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
Esencialmente lo que he hecho se deriva una nueva tabla a partir de la unión de dos consultas, como usted ha dicho que podría suceder en su caso. A continuación, agrego una columna con el número de fila al resultado de eso en un CTE, luego solo selecciono las filas especificadas en @Offset
y @limit + @offset
para recuperar solo las filas que solicitó.
E.g. Configuración @offset = 50
y @limit = 50
, se obtendría volver resultados 50-100 (según lo ordenado por los criterios especificados en la cláusula sobre Row_number
.
(espero que este era el tipo de cosas que estaba buscando!)
Editar: Esto solo funcionará en SQL Server 2005 en adelante. No ha mencionado qué versión está usando!
¿Cómo puedo obtener el número total de filas? – Victor
Desde el CTE, seleccione 'count (*) ', o' Max (RowNum) ... ' – Bridge