¿Cómo hago un script de carga que pueda correr muchas veces sin duplicar datos?
Cuaderno N°02 · Serie «Trucos de T-SQL para tu DW»
Por Javier Loria · Lectura ~10 min · SQL Server · Data Warehouse · ETL
La pregunta aparece apenas tienes que sembrar los catálogos de un data warehouse (tipos de movimiento, estados, conceptos) en dev, en QA, en producción y en el ambiente nuevo de la semana que viene. El reflejo —un INSERT que asume tabla vacía— vuelve cada despliegue una ruleta: o truena a la mitad, o inserta filas duplicadas, o alguien arma a mano un script «para esta vez».
Lo que quieres es un script idempotente: mismo resultado lo corras una o diez veces. Este cuaderno muestra cómo escribirlo en SQL Server con una sola técnica de conjuntos —(VALUES) EXCEPT SELECT— que inserta solo lo que falta y se puede correr sin miedo las veces que haga falta.
Qué vas a encontrar:
- Por qué el
INSERT ... VALUESingenuo solo se puede correr una vez. - El patrón
(VALUES) EXCEPT SELECT: declarar el conjunto y restar lo que ya existe. - Por qué el
NOT INque parecía equivalente te puede fallar. - Cómo detectar config drift: alguien cambió la configuración a mano.
- El
DISTINCTque viene gratis conEXCEPT. - Qué cambia si estás en Microsoft Fabric.
