El truco del MERGE con OUTPUT $action

¿Cómo actualizo mis dimensiones sin perder la historia de lo que cambió?

Cuaderno N°08 · Serie «Trucos de T-SQL para tu DW»

Por Javier Loria · Lectura ~13 min · SQL Server · SCD Tipo 2 · Data Warehouse

Cuando una dimensión de tu data warehouse cambia —un cliente se muda, un productor sube de categoría, un producto cambia de precio— y actualizas el dato encima, borras lo que era cierto antes. El costo aparece después: los reportes del año pasado dejan de cuadrar, porque muestran el precio de hoy sobre las ventas de ayer. Mantener ese historial sin pisarlo es lo que se llama Slowly Changing Dimension Tipo 2.

Este cuaderno muestra cómo resolver el SCD Tipo 2 con una sola sentencia —MERGE con OUTPUT $action—: una carga incremental que cierra la versión vieja, abre la nueva y deja, de regalo, la auditoría de qué cambió, todo en una operación atómica.

Qué vas a encontrar:

  • El problema: cerrar una versión y abrir otra sin que se desincronicen.
  • El truco: MERGE cierra, OUTPUT captura, el INSERT abre.
  • Cómo $action te da, de regalo, la bitácora de la carga.
  • Qué pasa si corres la carga dos veces el mismo día.
  • Dos trampas: la BK duplicada en el origen, y el WHEN NOT MATCHED BY SOURCE sobre un lote parcial.
  • Qué cambia si estás en Microsoft Fabric.