Está en la página 1de 1

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);

También podría gustarte