El point-in-time que el motor mantiene por vos

Cómo sé cómo estaba este dato en una fecha pasada sin construir el historial a mano?

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

Por Javier Loria · Lectura ~12 min · SQL Server · Temporal Tables · Data Warehouse

¿Cómo estaba este cliente —o este precio, o este saldo— el 1 de marzo?» es una pregunta que tarde o temprano llega de auditoría, de un reclamo o de un reporte que tiene que cuadrar contra una foto vieja. Si tu tabla solo guarda el estado actual, la respuesta es «no sé»: el dato de ayer se sobrescribió. Construir ese historial a mano funciona, pero es código que alguien mantiene y que falla callado.

SQL Server lo hace por ti con las temporal tables (system-versioned): la pregunta «¿cómo se veía este dato en tal fecha?» se responde en una línea. Este cuaderno muestra cómo el motor mantiene la historia solo, cómo consultar cualquier punto en el tiempo con FOR SYSTEM_TIME, y las trampas —zona horaria, bordes de período— que vuelven la respuesta sutilmente equivocada.

Qué vas a encontrar:

  • Por qué el point-in-time a mano se escribe bien… casi siempre.
  • El truco: FOR SYSTEM_TIME AS OF.
  • Lo más subestimado: el versionado es automático, el motor lo hace solo.
  • La trampa de que los períodos viven en UTC.
  • La trampa del período semiabierto, y por qué la historia hay que pedirla.
  • El mantenimiento que el motor NO hace por ti.