T-Sql Da error en sentencia CASE

22/02/2007 - 11:14 por Paul | Informe spam
Hola,

Estoy haciendo un procedimiento almacenado, donde quiero utilizar la
sentencia CASE pero siempre me da error.

FETCH NEXT FROM Actualitzacions INTO @id1, @id2
WHILE @@FETCH_STATUS = 0
BEGIN
CASE
WHEN @id1 = null AND @id2 = null
THEN @id3=0
WHEN @id1 = null AND @id2 != null
THEN @id3=1
WHEN @id1 != null AND @id2 = null
THEN @id3=2
ELSE @id3=3
END

FETCH NEXT FROM Actualitzacions INTO @id1, @id2
END

Que estoy haciendo mal?

Gracias
 

Leer las respuestas

#1 Carlos M. Calvelo
22/02/2007 - 12:23 | Informe spam
On 22 feb, 11:14, "Paul" wrote:
Hola,



Hola,


Estoy haciendo un procedimiento almacenado, donde quiero utilizar la
sentencia CASE pero siempre me da error.

FETCH NEXT FROM Actualitzacions INTO @id1, @id2
WHILE @@FETCH_STATUS = 0
BEGIN
CASE
WHEN @id1 = null AND @id2 = null
THEN @id3=0
WHEN @id1 = null AND @id2 != null
THEN @id3=1
WHEN @id1 != null AND @id2 = null
THEN @id3=2
ELSE @id3=3
END

FETCH NEXT FROM Actualitzacions INTO @id1, @id2
END

Que estoy haciendo mal?




Varias cosas:
1. el CASE es una expresión con resultado (una función)
(SET @id3 = CASE ... END)
2. variables o atributos no se comparan con null con el '=' sino con
IS NULL, IS NOT NULL.
3. no es que esté mal pero el CASE que has expuesto se puede
simplificar


SET @id3 = CASE
WHEN @id1 IS null AND @id2 IS null
THEN 0
WHEN @id1 IS null
THEN 1
WHEN @id2 IS null
THEN 2
ELSE 3
END

o quizás lo siguiente te dé otras ideas para p.e. evitar el cursor:

SELECT id1,
id2,
CASE WHEN id1 IS null AND id2 IS null THEN 0
WHEN id1 IS null THEN 1
WHEN id2 IS null THEN 2
ELSE 3
END AS id3
FROM Actualizations

Saludos,
Carlos

Preguntas similares