es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Sincronización diaria de registros de la tabla A a la tabla B en SQL Server.

Quiero crear un proceso diario en el que recargue todas las filas de la tabla A en la tabla B. Con el tiempo, las filas de la tabla A cambiarán debido a los cambios en el sistema de origen y también debido al envejecimiento/eliminación de registros en la tabla original. La tabla A se trunca/recarga a diario en el paso 1. La tabla B es la tabla maestra que solo recibe filas nuevas/actualizadas.

Desde un punto de vista histórico, quiero hacer un seguimiento de TODAS las filas en la tabla B y poder hacer una comparación puntual en el tiempo con fines analíticos.

Por lo tanto, necesito hacer dos cosas: insertar diariamente filas de la tabla A en la tabla B si no existen y también crear un nuevo registro en la tabla B si el registro ya existe pero ALGUNA de las columnas ha cambiado. En un momento intenté usar tablas temporales, pero tuve demasiados falsos positivos en los cambios reales, básicamente, ciertas columnas estaban generando problemas porque se actualizaba una columna de fecha/hora (el único cambio real en la fila).

Estoy utilizando una base de datos de Azure SQL Server Managed Instance (Microsoft SQL Azure (RTM) – 12.0.2000.8).
Tengo a mi disposición SSMS, SQL Server y también Azure Data Factory.

¿Alguna sugerencia sobre la mejor manera de hacer esto o herramientas que ayuden con esto?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Una forma de lograr esto sería utilizar una combinación de Azure Data Factory y procedimientos almacenados de SQL. Aquí tienes un plan de alto nivel:

    1. Crea una nueva tabla, llamada Tabla_C, con el mismo esquema exacto que Tabla_B. Esta tabla se utilizará para capturar todos los cambios históricos.
    2. Crea un procedimiento almacenado, llamado SP_InsertOrUpdateTableB, que tome dos parámetros: @id y @columns.
    3. En el procedimiento almacenado, primero verifica si @id existe en Tabla_B. Si no existe, inserta una nueva fila tanto en Tabla_B como en Tabla_C. Si existe, compara los valores de @columns con la fila existente en Tabla_B. Si son diferentes, inserta la nueva fila en Tabla_C y actualiza la fila existente en Tabla_B con los nuevos valores.
    4. En Azure Data Factory, crea un flujo de trabajo que realice lo siguiente:
      • Trunca Tabla_A.
      • Inserta todas las filas del sistema fuente en Tabla_A.
      • Recorre todas las filas de Tabla_A y llama al procedimiento almacenado SP_InsertOrUpdateTableB para cada fila con @id como clave primaria y @columns como una lista separada por comas de todas las columnas.

    Esta aproximación te permite mantener un registro histórico de todos los cambios realizados en Tabla_B, al tiempo que maneja eficientemente la recarga diaria de Tabla_A. También puedes personalizar el procedimiento almacenado SP_InsertOrUpdateTableB para excluir ciertas columnas de la comparación si es necesario.

Comments are closed.