Parametrizar ORDER BY

13/01/2007 - 22:50 por dgironal | Informe spam
Microsoft SQL Server 2000

¿Cómo prodría escribir un procedimiento almacenado que aceptara un
páramentro de entrada para la clausula ORDER BY?

CREATE Procedure pusuarios

@orderby char(11)

AS

SET NOCOUNT ON

SELECT RTRIM(usuario), ...
FROM tusuarios
ORDER BY @orderby

Return 0
GO


Gracias de antemano

Preguntas similare

Leer las respuestas

#1 dgironal
13/01/2007 - 23:08 | Informe spam
Una matización el parámetro @orderby será parecidoa :
campo1 ASC
campo2 DESC

Especifica el campo a ordenar y si es desdecendente o ascendente
Respuesta Responder a este mensaje
#2 dgironal
13/01/2007 - 23:25 | Informe spam
Casi lo tengo me falta poder ordenar ASC/DESC

CREATE Procedure pusuarios

@columna char(11)

AS

SET NOCOUNT ON

SELECT RTRIM(usuario),RTRIM(tipo), ...
FROM tusuarios
ORDER BY
CASE @columna
WHEN 'usuario' THEN usuario
WHEN 'tipo' THEN tipo
END

Return 0
GO
Respuesta Responder a este mensaje
#3 Alejandro Mesa
13/01/2007 - 23:31 | Informe spam
http://www.microsoft.com/communitie...a36b07279a


AMB

"dgironal" wrote:

Microsoft SQL Server 2000

¿Cómo prodría escribir un procedimiento almacenado que aceptara un
páramentro de entrada para la clausula ORDER BY?

CREATE Procedure pusuarios

@orderby char(11)

AS

SET NOCOUNT ON

SELECT RTRIM(usuario), ...
FROM tusuarios
ORDER BY @orderby

Return 0
GO


Gracias de antemano




Respuesta Responder a este mensaje
#4 dgironal
13/01/2007 - 23:33 | Informe spam
Creo que funciona pero me da la impresión que es algo "patatero" ¿se podría
mejorar, sin usar SQL dinámico?

CREATE Procedure pusuarios

@orderby char(16)

AS

SET NOCOUNT ON

SELECT
RTRIM(usuario),RTRIM(contraseña),RTRIM(tipo),alta,confirmado,RTRIM(descripcion),nif,RTRIM(email)
FROM tusuarios

ORDER BY
CASE @orderby WHEN 'usuario asc' THEN usuario ELSE NULL END asc,
CASE @orderby WHEN 'usuario desc' THEN usuario ELSE NULL END desc,

CASE @orderby WHEN 'contraseña asc' THEN contraseña ELSE NULL END asc,
CASE @orderby WHEN 'contraseña desc' THEN contraseña ELSE NULL END desc,

CASE @orderby WHEN 'tipo asc' THEN tipo ELSE NULL END asc,
CASE @orderby WHEN 'tipo desc' THEN tipo ELSE NULL END desc,

CASE @orderby WHEN 'alta asc' THEN alta ELSE NULL END asc,
CASE @orderby WHEN 'alta desc' THEN alta ELSE NULL END desc,

CASE @orderby WHEN 'confirmado asc' THEN confirmado ELSE NULL END asc,
CASE @orderby WHEN 'confirmado desc' THEN confirmado ELSE NULL END desc

Return 0
GO
Respuesta Responder a este mensaje
#5 Salvador
14/01/2007 - 01:14 | Informe spam
Yo tengo el mismo problema en un post más abajo, el sistema evidentemente
funciona, pero tienes que enumerar campo por campo de la base de datos, y si
quieres ordenar por dos campos tienes que hacer combinaciones, en algo
sencillo vale pero si lo tines que hacer por varios campos se complica.

"dgironal" wrote:

Creo que funciona pero me da la impresión que es algo "patatero" ¿se podría
mejorar, sin usar SQL dinámico?

CREATE Procedure pusuarios

@orderby char(16)

AS

SET NOCOUNT ON

SELECT
RTRIM(usuario),RTRIM(contraseña),RTRIM(tipo),alta,confirmado,RTRIM(descripcion),nif,RTRIM(email)
FROM tusuarios

ORDER BY
CASE @orderby WHEN 'usuario asc' THEN usuario ELSE NULL END asc,
CASE @orderby WHEN 'usuario desc' THEN usuario ELSE NULL END desc,

CASE @orderby WHEN 'contraseña asc' THEN contraseña ELSE NULL END asc,
CASE @orderby WHEN 'contraseña desc' THEN contraseña ELSE NULL END desc,

CASE @orderby WHEN 'tipo asc' THEN tipo ELSE NULL END asc,
CASE @orderby WHEN 'tipo desc' THEN tipo ELSE NULL END desc,

CASE @orderby WHEN 'alta asc' THEN alta ELSE NULL END asc,
CASE @orderby WHEN 'alta desc' THEN alta ELSE NULL END desc,

CASE @orderby WHEN 'confirmado asc' THEN confirmado ELSE NULL END asc,
CASE @orderby WHEN 'confirmado desc' THEN confirmado ELSE NULL END desc

Return 0
GO




Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida