Insertar o actualizar registro dependiendo de si existe o no
Enviado por admin el 14/06/2013 Deje un comentario (2) Ir a comentarios
Uno operacin tpica dentro de un procedimiento es comprobar si existe un registro p ara actualizarlo y en caso contrario insertarlo. Esto al principio lo haca de la siguiente forma: IF EXISTS ( SELECT campo FROM tabla WHERE id = @id ) UPDATE tabla SET campo = @campo WHERE id = @id ELSE INSERT INTO tabla ( id, campo ) VALUES ( @id, @campo ) Pero haba que estar metiendo transacciones as que empec a usar la opcin de hacer la actualizacin directamente y comprobar las columnas afectadas, en el caso no haber las, hacia la insercin. UPDATE tabla SET campo = @campo WHERE id = @id IF @@ROWCOUNT = 0 INSERT INTO tabla ( id, campo ) VALUES ( @id, @campo ) Con esto seguimos teniendo que meter transacciones pero es ms eficiente. Pero desde la versin 2008 de SQL Server, podemos usar el merge que no se si ser ms efectivo de cara a rendimiento pero s que quedaremos ms pofesionales . MERGE INTO tabla USING (VALUES (@id, @campo)) AS tmp (id, campo) ON campo.id = tmp.id WHEN MATCHED THEN UPDATE SET campo = tmp.campo WHEN NOT MATCHED THEN INSERT (id, campo) VALUES (tmp.id, tmp.campo);