Uno operación típica dentro de un procedimiento es comprobar si existe un registro para actualizarlo y en caso contrario insertarlo. Esto al principio lo hacía 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 había que estar metiendo transacciones así que empecé a usar la opción de hacer la actualización directamente y comprobar las columnas afectadas, en el caso no haberlas, hacia la inserción.
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 más eficiente.
Pero desde la versión 2008 de SQL Server, podemos usar el merge que no se si será más efectivo de cara a rendimiento pero sí que quedaremos más “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);
hola, yo tengo un inconveniente, yo tengo una base de datos que están trabajando en dos servidores diferentes, ahora yo deseo insertar los valores no existentes de una de las tablas hacia la otra, esto me podría ayudar?
En un principio debería funcionar pero habría que ver como esta configurado el balanceador de carga que usas para la base de datos.