Tengo el siguiente SP que estoy usando para paginar una lista de artículos de noticias. Como puede adivinar, @count
es el número de filas a devolver, @start
es el índice para seleccionar filas de (ordenadas por consulta interna), @orderby
indica la columna por ordenar, y @orderdir
indica si ordenar una dirección o la otro. Mi consulta original fue here, antes de agregar el parámetro @orderdir
.DESC y ASC como un parámetro en el procedimiento almacenado
ALTER PROCEDURE [mytable].[news_editor_paginate]
@count int,
@start int,
@orderby int,
@orderdir int
AS
BEGIN
SET NOCOUNT ON;
SELECT TOP (@count) * FROM
(
SELECT ne.*,n.publishstate,
(CASE WHEN @orderdir = 1 THEN
ROW_NUMBER() OVER (
ORDER BY
CASE WHEN @orderby = 0 THEN ne.[time] END DESC,
CASE WHEN @orderby = 1 THEN ne.lastedit END DESC,
CASE WHEN @orderby = 2 THEN ne.title END ASC
)
WHEN @orderdir = 2 THEN
ROW_NUMBER() OVER (
ORDER BY
CASE WHEN @orderby = 0 THEN ne.[time] END ASC,
CASE WHEN @orderby = 1 THEN ne.lastedit END ASC,
CASE WHEN @orderby = 2 THEN ne.title END DESC
)
END
) AS num
FROM news_edits AS ne
LEFT OUTER JOIN news AS n
ON n.editid = ne.id
)
AS a
WHERE num > @start
END
Ahora bien, nada en realidad va mal, pero el parámetro @orderby
no funciona. Si proporciono 1 como el parámetro @orderdir
, me dará exactamente los mismos resultados que si proporciono 2 como ese parámetro.
Sí que trabajaba exactamente lo que quería, parece tan obvio ahora que lo has anotado Gracias, tengo que esperar para marcar esto como la respuesta. –
Sin sudar. Arañé mi cabeza sobre esto varias veces antes cuando salió row_number. – Gats