SQL - procedemientos Almacenados

   
Vista:

procedemientos Almacenados

Publicado por Ana Castillo (2 intervenciones) el 08/12/2011 20:00:01
Hola nesecito crear un procedimiento almacenado para actualizar un registro si lla existe o crear uno nuevo si no tengo este pero me da errores

CREATE PROCEDURE Insertar_Actualizar
(
@EmployeeID [int],
@Title [nvarchar](50),
@HireDate [datetime],
@RateChangeDate [datetime],
@Rate [money],
@PayFrequency [tinyint],
@CurrentFlag [dbo].[Flag]
)

AS
BEGIN
IF EXISTS (EmployeeID)
UPDATE [HumanResources].[Employee]
SET [Title] = @Title
,[HireDate] = @HireDate
,[CurrentFlag] = @CurrentFlag
WHERE [EmployeeID] = @EmployeeID;

END
ELSE
BEGIN
INSERT INTO [HumanResources].[EmployeePayHistory]
([EmployeeID]
,[RateChangeDate]
,[Rate]
,[PayFrequency])
VALUES (@EmployeeID, @RateChangeDate, @Rate, @PayFrequency);
END
END

Agradesco su ayuda

estos son los errores
Mens 102, Nivel 15, Estado 1, Procedimiento Insertar_Actualizar, Línea 15
Sintaxis incorrecta cerca de 'EmployeeID'.
Mens 156, Nivel 15, Estado 1, Procedimiento Insertar_Actualizar, Línea 23
Sintaxis incorrecta cerca de la palabra clave 'ELSE'.
Mens 102, Nivel 15, Estado 1, Procedimiento Insertar_Actualizar, Línea 32
Sintaxis incorrecta cerca de 'END'.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

procedemientos Almacenados

Publicado por leonardo_josue (877 intervenciones) el 08/12/2011 20:48:13
Hola Ana Castillo:

Son varios los detalles que tienes que revisar en tu SP...

1
2
Mens 102, Nivel 15, Estado 1, Procedimiento Insertar_Actualizar, Línea 15
Sintaxis incorrecta cerca de 'EmployeeID'.


en primer lugar EmployeeID no existe, o en todo caso, si te refieres al PARÁMETRO que tienes definido de inicio te recuerdo que estos LLEVAN UNA @ AL INICIO. Segundo, estás utilizando una comparación EXISTS, pero ¿donde debe buscar o en qué tabla debe existir este registro?, es decir el IF tal y como lo tienes NO REALIZA UNA BÚSQUEDA SOBRE NINGUNA TABLA. Lo correcto es que hagas algo como esto:

1
2
3
4
5
6
IF EXISTS (SELECT * FROM TuTabla WHERE campo  = @EmployeeID)
--Actualizar el registro
...
ELSE
--Insertar el registro
...



En cuanto al error:

1
2
Mens 156, Nivel 15, Estado 1, Procedimiento Insertar_Actualizar, Línea 23
Sintaxis incorrecta cerca de la palabra clave 'ELSE'.


Nunca defines un BEGIN para tu IF, por lo tanto NO SE ESPERA QUE APAREZCA UN END

1
2
3
4
5
6
7
8
9
IF EXISTS (EmployeeID)
BEGIN --> ESTE ES EL BEGIN QUE FALTA
UPDATE [HumanResources].[Employee]
...
END
ELSE
BEGIN
........
END


El último error:

1
2
Mens 102, Nivel 15, Estado 1, Procedimiento Insertar_Actualizar, Línea 32
Sintaxis incorrecta cerca de 'END'.


Creo que se resuelve también con poner el BEGIN del punto anterior. Como podrás ver era sólo cuestión de cuidar estos pequeños detalles. No esperes que las cosas te salgan siempre a la primera, y en el futuro tómate algunos minutos para tratar de analizar qué es lo que estás haciendo antes de acudir a los foros. Espero que la información te sea de ayuda.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar