Re: Procedimiento almacenado-> guardar o actualizar
hola, bueno tras ver varios sitios con este tipo de información logre hacer algo pero aún así tengo dudas de esto.
si bien explique vagamente lo que intento de hacer (no sé por que cree el hilo sin saber un poco más.. perdon por el primer post). pero en concreto es:
tengo una tabla que para poder ingresarle datos, esto tiene que pasar por una serie de condiciones como; si el playas_id_playas no existe, el insert de aplica sin problema, en caso que que si exista, nos fijamos que uno de los datos de la tabla tiene que ser diferente priority_cam y aplicamos el insert.
en ambos casos el insert no viene con los valores de camPowerOn y camPowerOff, ya que la tabla los crea por defecto. ahora si el insert viene con estos datos y si playas_id_playas coincide con el del insert actualizo los valores de camPowerOn y camPowerOff sin modificar el resto columna de la tabla. Aqui me genera una duda, si aplico un update de camPowerOn y camPowerOff pero solo uno de estos viene con valor... y sabiendo que la tabla tiene para estos datos un is not null me crea un error o solo actualizaria el dato con valor??
pues bien para esto he creado el siguiente procedimiento, pero no se si va bien
CREATE PROCEDURE controlInsertInto
(
/*ME SALE ERRRO CON LA DECLARACION DE ESTAS VARIABLES*/
@tipo_camara VARCHAR(45),
@meteorologic_stations BIT(1),
@priority_cam VARCHAR(45),
@camPowerOn TIME,
@camPowerOff TIME,
@playas_id_playas INT(10)
)
AS
IF NOT EXISTS (SELECT * FROM TestV1.processing_unit
WHERE playas_id_playas = @playas_id_playas)
BEGIN
INSERT INTO TestV1.processing_unit
VALUE (@tipo_camara,@meteorologic_stations,@priority_cam,@playas_id_playas)
END
ELSE IF (EXISTS (SELECT * FROM TestV1.processing_unit
WHERE playas_id_playas = @playas_id_playas
AND priority_cam != @priority_cam)
BEGIN
INSERT INTO TestV1.processing_unit
VALUE (@tipo_camara,@meteorologic_stations,@priority_cam,@playas_id_playas)
END
ELSE IF (
EXISTS (SELECT * FROM TestV1.processing_unit
WHERE playas_id_playas = @playas_id_playas)
AND (@camPowerOn IS NOT NULL OR @camPowerOff IS NOT NULL)
)
BEGIN
UPDATE TestV1.processing_unit SET
camPowerOn = @camPowerOn,
camPowerOff = @camPowerOff
WHERE playas_id_playas = @playas_id_playas
END