Buenas. A ver si me tiran una soga. No hace mucho que me pasé a SQL 2005
Estoy tratando de incorporar ordenamiento dinámico en una consulta paginada
a una tabla.
Estoy usando el ROW_NUMBER OVER() de MS SQL 2005 para paginar
El problema que tengo es que me está tirando un error de conversión no sé
porqué al evaluar la expresión de ordenamiento.
Antes que nada, ya sé, no me digan
el CASE afecta la performance, pero es
lo único que se me ocurrió hasta ahora. Si hay un mejor método, por favor
corríjanme.
El código de la Stored es el siguiente:
CREATE PROCEDURE [dbo].[EntidadListar]
@startRowIndex int,
@maximumRows int,
@orderBy tinyint,
@Count int = null output
AS
BEGIN
SELECT nRow, Entidad_Id, Entidad_Nombre
FROM
(SELECT ROW_NUMBER() OVER(ORDER BY
CASE @orderBy
WHEN 0 THEN Entidad_Id
WHEN 1 THEN Entidad_Nombre
END
DESC
) as nRow,
Entidad_Id,
Entidad_Nombre
FROM Entidad
WHERE Entidad_Activo = 1
) As Entidad_Temp
WHERE nRow BETWEEN @startRowIndex
AND (@startRowIndex + @maximumRows) - 1
SET @Count = @@ROWCOUNT
END
Me está tirando el siguiente error:
Msg 245, Level 16, State 1, Procedure EntidadListar, Line 9
Conversion failed when converting the varchar value 'Texto de la primer
ocurrencia de Entidad_Nombre' to data type int.
Sin embargo, si dejo el ROW_NUMBER() OVER(ORDER BY Entidad_Nombre DESC)
funciona perfecto.
Otro problema (que dejé para solucionar después de este) es que no puedo
hacer dinámico el sentido de ordenamiento.
Si pongo por ejemplo
CASE
WHEN @orderBy = 0 THEN Entidad_Id ASC
WHEN @orderBy = 1 THEN Entidad_Id DESC
WHEN @orderBy = 2 THEN Entidad_Nombre ASC
WHEN @orderBy = 3 THEN Entidad_Nombre DESC
END
Me tira un error de sintaxis en los ASC y DESC finales. Tampoco funciona
poniendo después otro CASE para el ASC y DESC (aunque ya sería un abuso de
CASE)
Gracias
Leonardo