IF THEN ELSE en Stored Procedure

09/01/2008 - 00:41 por Juan Linares | Informe spam
Hola comunidad, les deseo feliz año y para iniciar actividades les dejo una
pregunta q mis pocos conocimientos de SQL no alcanzan a cubrir.
Estoy haciendo un Stored Procedure para actualizar un valor dependiendo del
valor que ya exista, dicho de otro modo, si el valor del campo es 0 lo
cambiara por 1 y viceversa...

Tengo esto:

create procedure [usuario_sistemaCB].[activaCliente]
@idCliente numeric
as
IF EXISTS ( SELECT locateCte, activa FROM clientesGral WHERE
locateCte=@idCliente AND activa=0)
update clientesGral set activa=1 WHERE locateCte=@idCliente
SELECT locateCte, activa FROM clientesGral WHERE locateCte=@idCliente

ELSE
update clientesGral set activa=0 WHERE locateCte=@idCliente
SELECT locateCte, activa FROM clientesGral WHERE locateCte=@idCliente
GO

********

Me devuelve un error 156: Incorrect Syntax near keyword ELSE

No he encontrado documentacion respecto al IF THEN ELSE y su sintaxis en SP
por lo que les agradecere su ayuda para este caso q sin duda para muchos de
ustedes sera sencillisimo.

Mil gracias
juan =D

Preguntas similare

Leer las respuestas

#1 Adriana R
09/01/2008 - 01:00 | Informe spam
El problema que tienes es que te falta el begin y end
es decir
IF EXISTS ( SELECT locateCte, activa FROM clientesGral WHERE
locateCte=@idCliente AND activa=0)
Begin
update clientesGral set activa=1 WHERE locateCte=@idCliente
SELECT locateCte, activa FROM clientesGral WHERE locateCte=@idCliente
end
ELSE
Begin
update clientesGral set activa=0 WHERE locateCte=@idCliente
SELECT locateCte, activa FROM clientesGral WHERE locateCte=@idCliente
end
ya que si no lo pones solo te permite ejecutar una instrución.
o como sigue
IF EXISTS ( SELECT locateCte, activa FROM clientesGral WHERE
locateCte=@idCliente AND activa=0)
update clientesGral set activa=1 WHERE locateCte=@idCliente
ELSE
update clientesGral set activa=0 WHERE locateCte=@idCliente

SELECT locateCte, activa FROM clientesGral WHERE locateCte=@idCliente

Ya que es el mismo select no importa cual actualización esta haciendo

Saludos
GO
#2 Juan Linares
09/01/2008 - 01:02 | Informe spam
Mil Gracias Adriana
paso correcto =D


"Adriana R" escribió en el mensaje
news:
Mostrar la cita
#3 Jesús López
09/01/2008 - 11:52 | Informe spam
En realidad no haría falta el IF..ELSE, ni leer los datos antes de
actualiar, ni leer los datos después de actualizar

UPDATE clientesGral
SET activa = (CASE activa WHEN 0 THEN 1 WHEN 1 THEN 0 END)
WHERE locateCte = @idCliente


Saludos:

Jesús López
www.solidq.com




"Juan Linares" escribió en el mensaje
news:umg%
Mostrar la cita
#4 Carlos Hidalgo
11/01/2008 - 17:35 | Informe spam
Wow, eso no lo sabía, pero habrás dado en el clavo de lo que buscaba este
amigo, porque si es así, se me hace una manera elegante de atacar el
problema...

Saludos

"Jesús López" escribió en el
mensaje de noticias news:
Mostrar la cita
Ads by Google
Search Busqueda sugerida