Me preguntaba si ha encontrado un comando T-SQL similar al concepto de UPSERT. Realizar operaciones INSERT | UPDATE con las opciones (1) o (2) parece excesivamente complejo y propenso a errores.
OBJETIVO
Para garantizar que el registro deseado (en este caso employee_id 1) esté actualizado SIN tener que escribir esencialmente la misma consulta dos veces.
CONTEXTO
- nombre de la tabla: empleado
- ID de empleado: tiene una clave principal y la identidad de identidad se establece en verdadero
OPCIONES
ejecute una ACTUALIZACIÓN de SQL ... verifique @@ rowcount = 0 y @@ error = 0 ... ejecute SQL INSERT si es necesario
- con: tiene que escribir la misma consulta dos veces, una vez como inserción, una vez como actualización
- con: más código = más tiempo escribiendo
- con: más código = más margen de error
/programming/1106717/how-to-implement-a-conditional-upsert-stored-procedure "Actualizar usando @@ rowcount"
- ejecutar un SQL MERGE
- con: tiene que escribir la misma consulta dos veces, una vez como inserción, una vez como actualización
- con: más código = más tiempo escribiendo
- con: más código = más margen de error
http://technet.microsoft.com/en-us/library/bb510625.aspx "T-SQL Merge"
- ejecutar un UPSERTERT de SQL (la función no existe)
- pro: define la relación de datos a tabla una vez (deje que SQL Server se preocupe por si es o no un INSERT o una ACTUALIZACIÓN)
- pro: menos código = implementación más rápida
- pro: menos código = menor probabilidad
EJEMPLO DE INICIO
UPSERT employeee (employee_id, employee_number, job_title, first_name, middle_name, apellido, modified_at) VALUES (1, '00 -124AB37 ',' Manager ',' John ',' T ',' Smith ', GetDate ());
- si employee_id 1 no existe: MS SQL ejecuta una instrucción INSERT
- si employee_id 1 existe: MS SQL se ejecuta y la instrucción UPDATE
MERGE
es sencillo, flexible y también forma parte de SQL Standard. El verdadero problema con MERGE
y otras UPSERT
implementaciones es la escalada de bloqueo potencial o incluso puntos muertos que no tiene nada que ver con la sintaxis.
MERGE
implementación en SQL Server.