SQL Server 2008: Mejoras para desarrolladores (II)!

Siguiendo con la serie de post sobre las mejoras que trae SQL Server 2008 para desarrolladores, iniciada con el post dedicado a los TPVs, en este nuevo post os vamos a presentar una nueva cláusula T-SQL que aparece con la nueva versión de la plataforma de datos de Microsoft: la cláusula MERGE. Esta cláusula nos va a permitir definir lógica de combinación para operaciones atómicas de inserción, borrado y actualización de datos. La idea bajo la cláusula MERGE es poder combinar múltiples sentencias DML (Data Manipulation Language) en un único bloque IO, evitando así posibles pérdidas de datos por IO (esto es importante por ejemplo en escenarios Data Warehouse dónde se manipulan grandes cantidades de datos).

La cláusula MERGE en acción

Vamos a realizar un ejemplo de uso de la cláusula MERGE:

  • Creamos una BD de pruebas:

CREATE DATABASE TestMerge

GO

USE TestMerge

GO

  • Creamos dos tabla en la BD anterior (Sales y NewSales):

USE TestMerge

GO

 

CREATE TABLE dbo.Sales

(

  SalesID  int IDENTITY(1,1) NOT NULL,

  Branch  varchar(50) NOT NULL,

  Month                   varchar(50) NOT NULL,

  Total                     money NOT NULL

)

GO

 

CREATE TABLE dbo.NewSales

(

  Branch  varchar(50) NOT NULL,

  Month                   varchar(50) NOT NULL,

  Total                     money NOT NULL

)

GO

  • Insertamos datos en las dos tablas anteriores:

— Insertamos elementos iniciales… Santander tiene datos parciales

— de Febrero!

INSERT INTO dbo.Sales VALUES (‘Santander’,’Jan’,50000)

INSERT INTO dbo.Sales VALUES (‘Laredo’,’Jan’,39500)

INSERT INTO dbo.Sales VALUES (‘Torrelavega’,’Jan’,41000)

INSERT INTO dbo.Sales VALUES (‘Santander’,’Feb’,1000)

 

— Insertamos la tabla con datos nuevos

INSERT INTO dbo.NewSales VALUES (‘Santander’,’Feb’,85000)

INSERT INTO dbo.NewSales VALUES (‘Laredo’,’Feb’,62000)

INSERT INTO dbo.NewSales VALUES (‘Torrelavega’,’Feb’,45750)

Como vemos, la peculiaridad de las inserciones anteriores radica en qué tenemos en Sales dos registros Santander con datos parciales.

  • Ejecutamos la siguiente sentencia que utiliza la sentencia MERGE:

MERGE Sales

USING (SELECT Branch, Month, Total FROM NewSales) AS origen ( Branch,Month,Total)

ON Sales.Branch=origen.Branch

AND Sales.Month = origen.Month

  WHEN MATCHED

    THEN UPDATE

       SET Sales.Total = origen.Total

  WHEN NOT MATCHED

    THEN INSERT VALUES(Branch,Month,Total);

¿Qué estamos haciendo? Estamos consolidando los datos de la tabla con los datos que aparecen en la tabla NewSales. Todo ello gracias a las cláusulas WHEN MATCHED y WHEN NOT MACHED.

  • Para comprobar que la cláusula MERGE ha realizado su trabajo, ejecutamos la siguiente sentencia SELECT en la tabla Sales:

image

Como vemos, la sentencia MERGE nos ha permitido consolidar los datos del mes de febrero para Santander.

 

Limitaciones

Aunque MERGE es una cláusula realmente potente, presenta una serie de limitaciones que tenemos que tener en mente:

  • El destino no puede ser:
    • Una tabla remota.
    • Una tabla particionada.
  • No se soporta parametrización simple
  • Sólo se devuelve el número de filas acumuladas: sin desglose por sentencias INSERT, UPDATE, DELETE.

Y hasta aquí llega el segundo post de la serie de Mejoras para desarrolladores en SQL Server 2008. Espero que os haya resultado interesante.

Publicado por

Juan Carlos González

Juan Carlos es Ingeniero de Telecomunicaciones por la Universidad de Valladolid y Diplomado en Ciencias Empresariales por la Universidad Oberta de Catalunya (UOC). Cuenta con más de 12 años de experiencia en tecnologías y plataformas de Microsoft diversas (SQL Server, Visual Studio, .NET Framework, etc.), aunque su trabajo diario gira en torno a SharePoint & Office 365. Juan Carlos es MVP de Office Servers & Services desde 2015 (anteriormente fue reconocido por Microsoft como MVP de Office 365 y MVP de SharePoint Server desde 2008 hasta 2015), coordinador del grupo de usuarios .NET de Cantabria (Nuberos.Net, www.nuberos.es), co-fundador y coordinador del Grupo de Usuarios de SharePoint de España (SUGES, www.suges.es), así como co-director de la revista gratuita en castellano sobre SharePoint CompartiMOSS (www.compartimoss.com). Hasta la fecha, ha publicado 8 libros sobre SharePoint & Office 365 y varios artículos en castellano y en inglés sobre ambas plataformas.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *