Hola, tengo un SP para realizar paginacion y lo estoy modificando para que me ordene la lista de acuerdo a algun campo. Ya logre hacer el ORDER BY para que la lista se ordene segun un campo que le paso como parametro, pero no puedo hacer que me tome el orden (asc o desc), que tambien se lo paso como parametro.
El SP es el siguiente
Código:
CREATE PROCEDURE [dbo].[GetArticulosPage]
@PageSize int,
@PageNumber int,
@OrderBy varchar(50),
@OrderBySort varchar(50)
AS
SELECT id_articulo, nombre, codigo, linea, padre, razonSocial
FROM (
SELECT a.id_articulo, l.linea, l.padre, a.nombre, ap.codigo, p.razonSocial,
ROW_NUMBER() OVER (ORDER BY a.nombre, a.id_articulo) AS RowNumber
FROM ARTICULO a JOIN ARTICULO_PROVEEDOR ap
ON a.id_articulo = ap.id_articulo JOIN LINEA l
ON a.id_linea = l.id_linea
JOIN PROVEEDOR p
ON ap.id_proveedor = p.id_proveedor
) AS Articulo
WHERE RowNumber BETWEEN @PageSize * @PageNumber + 1
AND @PageSize * (@PageNumber + 1)
ORDER BY
CASE WHEN @OrderBy = 'razonSocial' THEN razonSocial
WHEN @OrderBy = 'linea' THEN linea
ELSE nombre
END
En algun lado encontre que poniendole @OrderBySort despues del END del CASE que esta en el ORDER BY, deberia funcionar, pero el Analizador de consulta me da error justo en esa linea. Estimo que el ejemplo que encontre no es para SQLSERVER 2005 que es con lo que estoy trabajando.
Alguien tiene alguna idea de como hacerlo??
Otro problema que tengo es la de poner mas clausulas WHERE dependiendo de algunos parametros que le mando, especificamente para filtrar los resultados los cuales se eligen dinamicamente, por eso es que pueden o no estar.
Alguien sabe si se puede usar algun tipo de IF dentro del WHERE o al go parecido?
Saludos, y gracias de antemano