Duda case ... when... then

26/10/2005 - 09:38 por Kike | Informe spam
hola Grupo:
Tengo la siguiente consulta

declare @orden varchar(40)
set @orden='numtarjeta' -- ESTE PUEDE VENIR POR 'NumTarjeta' o
'FechaInscripcion'

select
dbo.FNumTarjeta(tblinscripciones.id_tipousuario,tblinscripciones.id_usuario)
as NumTarjeta, tblinscripciones.FechaInscripcion
from tblloquesea
ORDER BY case @Orden
when 'FechaInscripcion' then FechaInscripcion
when 'NumTarjeta' then
dbo.FNumTarjeta(tblinscripciones.id_tipousuario,tblinscripciones.id_usuario)
end

el caso es que asi me da este error:
Servidor: mensaje 295, nivel 16, estado 3, línea 3
Error de sintaxis al convertir una cadena de caracteres al tipo de datos
smalldatetime.

Sin embargo si formateo FechaInscripcion a convert(varchar(10),FechaInscripcion,103) en el 'case'

se arregla y me gustaria saber porque ????? ya que si la variable orden
me viene con 'FechaInscripcion' No da error de ninguna de las formas.
¿Tienen que ser del mismo tipo?¿entonces porque si me llega con
FechaInscripcion no da error?

Muchas Gracias a todos
 

Leer las respuestas

#1 Carlos Sacristán
26/10/2005 - 09:47 | Informe spam
Sí, claro que tienen que ser del mismo tipo porque si no, no habría
forma de ordenarlo. Es probable que la función que estás usando devuelva un
tipo de dato que no pueda ser convertido implícitamente a SMALLDATETIME.

De todos modos, es más eficiente poner el típico "IF" y ordenarlo por el
campo que la variable te indique:

IF @orden = 'FechaInscripcion'
SELECT ... ORDER BY fechaInscripcion
ELSE IF @orden = 'numTarjeta'
SELECT ... ORDER BY
dbo.FNumTarjeta(tblinscripciones.id_tipousuario,tblinscripciones.id_usuario)



Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Kike" escribió en el mensaje
news:
hola Grupo:
Tengo la siguiente consulta

declare @orden varchar(40)
set @orden='numtarjeta' -- ESTE PUEDE VENIR POR 'NumTarjeta' o
'FechaInscripcion'

select



dbo.FNumTarjeta(tblinscripciones.id_tipousuario,tblinscripciones.id_usuario)
as NumTarjeta, tblinscripciones.FechaInscripcion
from tblloquesea
ORDER BY case @Orden
when 'FechaInscripcion' then FechaInscripcion
when 'NumTarjeta' then



dbo.FNumTarjeta(tblinscripciones.id_tipousuario,tblinscripciones.id_usuario)
end

el caso es que asi me da este error:
Servidor: mensaje 295, nivel 16, estado 3, línea 3
Error de sintaxis al convertir una cadena de caracteres al tipo de datos
smalldatetime.

Sin embargo si formateo FechaInscripcion a > convert(varchar(10),FechaInscripcion,103) en el 'case'

se arregla y me gustaria saber porque ????? ya que si la variable


orden
me viene con 'FechaInscripcion' No da error de ninguna de las formas.
¿Tienen que ser del mismo tipo?¿entonces porque si me llega con
FechaInscripcion no da error?

Muchas Gracias a todos



Preguntas similares