Usar MERGE en paquetes de Integration Services

En SQL Server 2008 Integration Services (SSIS), la instrucción SQL de una tarea Ejecutar SQL puede incluir una instrucción MERGE. Esta instrucción MERGE permite llevar a cabo varias operaciones INSERT, UPDATE y DELETE en una única instrucción.

Normalmente, la instrucción MERGE se usa cuando se desea aplicar ciertos cambios, como inserciones, actualizaciones y eliminaciones, de una tabla a otra. En las versiones anteriores a SQL Server 2008, este proceso requería una transformación Búsqueda y varias transformaciones Comando de OLE DB. La transformación Búsqueda realizaba una búsqueda fila por fila para determinar si la fila era nueva o se había modificado. A continuación, las transformaciones Comando de OLE DB llevaban a cabo las operaciones INSERT, UPDATE y DELETE necesarias. En SQL Server 2008, una única instrucción MERGE puede reemplazar ambos tipos de transformaciones.

Para utilizar la instrucción MERGE en un paquete, siga estos pasos:

  • Cree una tarea Flujo de datos que cargue, transforme y guarde los datos de origen en una tabla temporal o de ensayo.

  • Cree una tarea Ejecutar SQL que incluya la instrucción MERGE.

  • Conecte la tarea Flujo de datos a la tarea Ejecutar SQL, y use los datos de la tabla de ensayo como entrada para la instrucción MERGE.

    Nota

    Aunque una instrucción MERGE normalmente requiere una tabla de ensayo en este escenario, generalmente ofrece un mayor rendimiento que el de la búsqueda fila por fila realizada por la transformación Búsqueda. La instrucción MERGE también resulta útil cuando el gran tamaño de una tabla de búsqueda pondría a prueba la memoria que la transformación de búsquedas puede usar para almacenar en caché su tabla de referencia.

El resto de este tema explica algunos usos adicionales de la instrucción MERGE. Para obtener más información y ejemplos acerca de cómo usar la operación MERGE, vea Insertar, actualizar y eliminar datos mediante MERGE.

Para obtener un componente de destino de ejemplo que admite el uso de la instrucción MERGE, vea el ejemplo de la comunidad de CodePlex, MERGE Destination.

Usar MERGE con cargas incrementales

La nueva función de SQL Server 2008 de captura de datos modificados facilita la realización confiable de cargas incrementales durante el almacenamiento de datos. Como alternativa al uso de transformaciones Comando de OLE DB con parámetros para realizar inserciones y actualizaciones, se puede usar la instrucción MERGE para combinar ambas operaciones.

Para obtener más información, vea Aplicar los cambios al destino.

Usar MERGE en otros escenarios

En los escenarios siguientes, se puede utilizar la instrucción MERGE fuera o dentro de un paquete de Integration Services. Sin embargo, a menudo se requiere un paquete de Integration Services para cargar estos datos desde varios orígenes heterogéneos, así como para combinarlos y limpiarlos posteriormente. Por lo tanto, puede ser interesante usar la instrucción MERGE en un paquete por su comodidad y su facilidad de mantenimiento.

Realizar un seguimiento de los hábitos de compra

La tabla FactBuyingHabits del almacenamiento de datos realiza un seguimiento de la última fecha en la que un cliente adquirió un determinado producto. Dicha tabla consta de las columnas ProductID, CustomerID y PurchaseDate. Todas las semanas, la base de datos transaccional genera una tabla PurchaseRecords que incluye las compras realizadas durante la semana. El objetivo es usar una única instrucción MERGE para combinar la información de la tabla PurchaseRecords con la de la tabla FactBuyingHabits. Para los pares de producto-cliente que no existen, la instrucción MERGE inserta nuevas filas. Para los pares de producto-cliente existentes, la instrucción MERGE actualiza la fecha de compra más reciente.

Realizar un seguimiento del historial de precios

La tabla DimBook representa la lista de libros en el inventario de un vendedor de libros e identifica el historial de precios de cada libro. Esta tabla tiene las siguientes columnas: ISBN, ProductID, Price, Shelf e IsCurrent. También incluye una fila para cada precio que ha tenido el libro. Una de estas filas contiene el precio actual. Para indicar la fila que contiene el precio actual, el valor de la columna IsCurrent para dicha fila se establece en 1.

Todas las semanas, la base de datos genera una tabla denominada WeeklyChanges que contiene los cambios de precio para la semana y los libros que se han agregado durante la misma. Una única instrucción MERGE permitirá aplicar los cambios de la tabla WeeklyChanges a la tabla DimBook. Esta instrucción MERGE inserta nuevas filas para las nuevas adquisiciones de libros, y actualiza la columna IsCurrent a 0 en las filas de libros existentes cuyos precios han cambiado. Dicha instrucción también inserta nuevas filas para los libros cuyos precios han cambiado, y establece el valor de la columna IsCurrent en 1 para estas filas.

Combinar una tabla que tiene nuevos datos con la tabla antigua

La base de datos modela las propiedades de un objeto mediante un “esquema abierto”, es decir, una tabla que contiene pares de nombre-valor para cada propiedad. La tabla Properties tiene tres columnas: EntityID, PropertyID y Value. La tabla NewProperties, que es una versión más reciente de dicha tabla, se debe sincronizar con la tabla Properties. Para sincronizar ambas tablas, puede utilizar una única instrucción MERGE que realice las operaciones siguientes:

  • Eliminar las propiedades de la tabla Properties que no aparezcan en la tabla NewProperties.

  • Actualizar los valores de las propiedades que aparecen en la tabla Properties con los nuevos valores incluidos en la tabla NewProperties.

  • Insertar nuevas propiedades para las propiedades existentes en la tabla NewProperties pero que no aparecen en la tabla Properties.

Este enfoque es útil en escenarios similares a los escenarios de replicación, en los que el objetivo es mantener sincronizados los datos de dos tablas ubicadas en dos servidores.

Realizar un seguimiento del inventario

La base de datos Inventory incluye una tabla ProductsInventory con las columnas ProductID y StockOnHand. La tabla Shipments, que contiene las columnas ProductID, CustomerID y Quantity, realiza un seguimiento de los envíos de los productos a los clientes. La tabla ProductInventory debe actualizarse diariamente basándose en la información de la tabla Shipments. Una única instrucción MERGE puede reducir el inventario en la tabla ProductInventory sobre la base de los envíos realizados. Si el inventario de un producto se ha reducido a 0, dicha instrucción MERGE también puede eliminar la fila del producto de la tabla ProductInventory.

Icono de Integration Services (pequeño) Manténgase al día con Integration Services

Para obtener las más recientes descargas, artículos, ejemplos y vídeos de Microsoft, así como soluciones seleccionadas de la comunidad, visite la página de Integration Services en MSDN o TechNet:

Para recibir notificaciones automáticas de estas actualizaciones, suscríbase a las fuentes RSS disponibles en la página.

Vea también

Referencia

Conceptos