{"id":2321,"date":"2020-11-15T17:12:31","date_gmt":"2020-11-15T17:12:31","guid":{"rendered":"http:\/\/manualsqlserver.com\/?p=2321"},"modified":"2020-12-18T01:21:35","modified_gmt":"2020-12-18T01:21:35","slug":"usando-merge-con-select","status":"publish","type":"post","link":"https:\/\/manualsqlserver.com\/?p=2321","title":{"rendered":"Usando Merge con Select"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"220\" height=\"260\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/11\/ManualSQL_UsandoMerge__D.png\" alt=\"\" class=\"wp-image-2322\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Usando Merge con una consulta como origen<\/h2>\n\n\n\n<p>La instrucci\u00f3n Merge realiza instrucciones de inserci\u00f3n de registros, actualizaci\u00f3n o eliminaci\u00f3n de registros en una tabla de destino en la misma base de datos o en otra base de datos seg\u00fan los resultados de combinar los registros con una tabla de origen, esta tabla origen puede ser una consulta Select.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Merge puede ser usado de varias formas, en este ejercicio se va a usar dentro de un procedimiento almacenado para la inserci\u00f3n o actualizaci\u00f3n de un empleado. El origen desde donde se actualizar\u00e1 la tabla es una consulta.<\/p>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Sintaxis<br><\/strong>La forma de usar Merge es la siguiente:<\/p>\n\n\n\n<p><strong>MERGE<br>[ TOP ( n ) [ PERCENT ] ]<br>[ INTO ] [ [ AS ] AliasTablaDestino ]<br>USING [ [ As ] AliasTablaOrigen]<br>ON<br>[ WHEN MATCHED [ AND ]<br>THEN ] [ \u2026n ]<br>[ WHEN NOT MATCHED [ BY TARGET ] [ AND ]<br>THEN ]<br>[ WHEN NOT MATCHED BY SOURCE [ AND ]<br>THEN ] [ \u2026n ]<\/strong><\/p>\n\n\n\n<p>Donde<br><strong>[ TOP ( n ) [ PERCENT ] ]<\/strong><br>Permite especificar la cantidad en registros o porcentaje del total<br>que se tendr\u00e1n en cuenta para las instrucciones dentro de Merge.<br><strong>[ INTO ] [ [ AS ] AliasTablaDestino ]<\/strong><br>Permite especificar la tabla donde se realizar\u00e1 la acci\u00f3n.<br><strong>USING [ [ As ] AliasTablaOrigen]<\/strong><br>Permite especificar la tabla o conjunto de resultados que servir\u00e1n para realizar las instrucciones del Merge.<br><strong>ON<\/strong><br>Condici\u00f3n o condiciones que deben de cumplir los registros al compararlos entre las tablas origen y destino.<br><strong>[ WHEN MATCHED [ AND ]<br>THEN ] [ \u2026n ]<\/strong><br>Instrucciones cuando se encuentra coincidencia en el destino.<br><strong>[ WHEN NOT MATCHED [ BY TARGET ] [ AND ]<br>THEN ]<br><\/strong>Instrucciones cuando no se encuentra coincidencia en el origen.<br><strong>[ WHEN NOT MATCHED BY SOURCE [ AND ]<br>THEN ] [ \u2026n ]<\/strong><br>Instrucciones cuando no se encuentra coincidencia en el origen.<\/p>\n\n\n\n<p style=\"font-size:22px\"><strong>Para mayor informaci\u00f3n ver:<\/strong><\/p>\n\n\n\n<p style=\"font-size:22px\"><strong><a rel=\"noreferrer noopener\" href=\"https:\/\/manualsqlserver.com\/?p=368\" target=\"_blank\">Merge en SQL Server<\/a><br><a rel=\"noreferrer noopener\" href=\"https:\/\/manualsqlserver.com\/?p=314\" target=\"_blank\">Procedimientos almacenados en SQL Server<\/a><br><a rel=\"noreferrer noopener\" href=\"https:\/\/manualsqlserver.com\/?p=1493\" target=\"_blank\">Variables en SQL Server<\/a><br><a rel=\"noreferrer noopener\" href=\"https:\/\/manualsqlserver.com\/?p=294\" target=\"_blank\">Insertar registros<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=300\" target=\"_blank\" rel=\"noreferrer noopener\">Actualizaci\u00f3n de registros<\/a><br>Output en Merge SQL Server<\/strong><\/p>\n\n\n\n<p><strong>Usando la base de datos Northwind<\/strong><\/p>\n\n\n\n<p>use Northwind<br>go<\/p>\n\n\n\n<p style=\"font-size:24px\"><strong>Ejercicio<\/strong><\/p>\n\n\n\n<p><strong>Procedimiento almacenado que eval\u00faa la existencia de un Cliente, si el cliente existe se van a actualizar sus datos y si no existe se va a insertar un nuevo cliente.<\/strong><\/p>\n\n\n\n<p>Create or alter procedure spClientesActualizaInsertaMerge<br>(<br>@Codigo nchar(5),<br>@Nombre nvarchar(40),<br>@Contacto nvarchar(30),<br>@Cargo nvarchar(30),<br>@Direccion nvarchar(60),<br>@Ciudad nvarchar(15),<br>@Region nvarchar(15),<br>@CodigoPostal nvarchar(10),<br>@Pais nvarchar(15),<br>@Fono nvarchar(24),<br>@Fax nvarchar(24)<br>)<br>As<br>MERGE dbo.Customers As ClientesDestino<br>USING<br>(<br><strong>SELECT @Codigo, @Nombre, @Contacto, @Cargo, @Direccion,<br>@Ciudad, @Region, @CodigoPostal, @Pais, @Fono, @Fax)<br>As ClientesOrigen<br>([CustomerID], [CompanyName], [ContactName], [ContactTitle], [Address], [City], [Region], [PostalCode], [Country], [Phone], [Fax])<\/strong><br>ON ClientesDestino.CustomerId = ClientesOrigen.CustomerId<br>WHEN MATCHED then &#8212; Cliente encontrado<br>UPDATE<br>     SET [CustomerID]=ClientesOrigen.[CustomerID],<br>     [CompanyName]=ClientesOrigen.[CompanyName],<br>     [ContactName]=ClientesOrigen.[ContactName],<br>     [ContactTitle]=ClientesOrigen.[ContactTitle],<br>     [Address]=ClientesOrigen.[Address],<br>     [City]=ClientesOrigen.[City],<br>     [Region]=ClientesOrigen.[Region],<br>     [PostalCode]=ClientesOrigen.[PostalCode],<br>     [Country]=ClientesOrigen.[Country],<br>     [Phone]=ClientesOrigen.[Phone],<br>     [Fax]=ClientesOrigen.[Fax]<br>WHEN NOT MATCHED THEN &#8212; Cliente no encontrado<br>INSERT VALUES<br>(@Codigo, @Nombre, @Contacto, @Cargo, @Direccion,<br>@Ciudad, @Region, @CodigoPostal, @Pais, @Fono, @Fax);<br>go<\/p>\n\n\n\n<p><strong>Listado de los clientes, se puede ver que el cliente con el que se va a ejecutar el SP no existe.<br><\/strong>Select * from customers<br>go<br>El resultado se muestra en la siguiente imagen<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/11\/ManualSQL_UsandoMerge_01-1024x608.png\" alt=\"\" class=\"wp-image-2323\" width=\"763\" height=\"453\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/11\/ManualSQL_UsandoMerge_01-1024x608.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/11\/ManualSQL_UsandoMerge_01-300x178.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/11\/ManualSQL_UsandoMerge_01-768x456.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/11\/ManualSQL_UsandoMerge_01-795x472.png 795w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/11\/ManualSQL_UsandoMerge_01.png 1382w\" sizes=\"auto, (max-width: 763px) 100vw, 763px\" \/><\/figure>\n\n\n\n<p><strong>Ejecutar el SP con un nuevo cliente.<\/strong><br>Los datos del nuevo cliente son:<br>Codigo = &#8216;FLSND&#8217;<br>Nombre = &#8216;TRAINER SQL SERVER&#8217;<br>Contacto = &#8216;FERNANDO LUQUE SANCHEZ&#8217;<br>Cargo = &#8216;GERENTE GENERAL&#8217;<br>Direccion = &#8216;Av. San Blas 4995&#8217;<br>Ciudad = &#8216;Lima&#8217;<br>Region = &#8216;CE&#8217;<br>CodigoPostal = &#8216;11258&#8217;<br>Pais = &#8216;Per\u00fa&#8217;<br>Fono = &#8216;949483333&#8217;<br>Fax = &#8216;052-525258&#8217;<\/p>\n\n\n\n<p><strong>Ejecutando el procedimiento almacenado.<\/strong><br>Execute spClientesActualizaInsertaMerge<br>   @Codigo = &#8216;FLSND&#8217;,<br>   @Nombre = &#8216;TRAINER SQL SERVER&#8217;,<br>   @Contacto = &#8216;FERNANDO LUQUE SANCHEZ&#8217;,<br>   @Cargo = &#8216;GERENTE GENERAL&#8217;,<br>   @Direccion = &#8216;Av. San Blas 4995&#8217;,<br>   @Ciudad = &#8216;Lima&#8217;,<br>   @Region = &#8216;CE&#8217;,<br>   @CodigoPostal = &#8216;11258&#8217;,<br>   @Pais = &#8216;Per\u00fa&#8217; ,<br>   @Fono = &#8216;949483333&#8217;, <br>   @Fax = &#8216;052-525258&#8217;<br>go<br><strong>Listado de los clientes<\/strong><br>select * from customers<br>go<br>El resultado se muestra en la siguiente imagen<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/11\/ManualSQL_UsandoMerge_02-1024x588.png\" alt=\"\" class=\"wp-image-2324\" width=\"742\" height=\"426\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/11\/ManualSQL_UsandoMerge_02-1024x588.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/11\/ManualSQL_UsandoMerge_02-300x172.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/11\/ManualSQL_UsandoMerge_02-768x441.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/11\/ManualSQL_UsandoMerge_02-795x457.png 795w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/11\/ManualSQL_UsandoMerge_02.png 1441w\" sizes=\"auto, (max-width: 742px) 100vw, 742px\" \/><\/figure>\n\n\n\n<p><strong>Ejecutamos el SP con el mismo c\u00f3digo del cliente pero con algunos datos cambiados.<br><\/strong>Execute spClientesActualizaInsertaMerge<br>@Codigo = &#8216;FLSND&#8217;,<br>@Nombre = &#8216;Master SQL SERVER&#8217;,<br>@Contacto = &#8216;FERNANDO LUQUE SANCHEZ&#8217;,<br>@Cargo = &#8216;GERENTE GENERAL&#8217;,<br>@Direccion = &#8216;Av. Los \u00c1lamos 159&#8217;,<br>@Ciudad = &#8216;Trujillo&#8217;,<br>@Region = &#8216;CE&#8217;,<br>@CodigoPostal = &#8216;25852&#8217;,<br>@Pais = &#8216;Per\u00fa&#8217; ,<br>@Fono = &#8216;95858582&#8217;,<br>@Fax = &#8216;052-525258&#8217;<br>go<\/p>\n\n\n\n<p><strong>Listado de los clientes<\/strong><br>select * from customers<br>go<br>El resultado se muestra en la siguiente imagen<br>Note que se han actualizado el nombre del cliente, la direcci\u00f3n, la ciudad, el c\u00f3digo postal y el tel\u00e9fono.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/11\/ManualSQL_UsandoMerge_03-1024x580.png\" alt=\"\" class=\"wp-image-2325\" width=\"709\" height=\"401\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/11\/ManualSQL_UsandoMerge_03-1024x580.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/11\/ManualSQL_UsandoMerge_03-300x170.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/11\/ManualSQL_UsandoMerge_03-768x435.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/11\/ManualSQL_UsandoMerge_03-795x450.png 795w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/11\/ManualSQL_UsandoMerge_03.png 1454w\" sizes=\"auto, (max-width: 709px) 100vw, 709px\" \/><\/figure>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Usando Merge con una consulta como origen La instrucci\u00f3n Merge realiza instrucciones de inserci\u00f3n de registros, actualizaci\u00f3n o eliminaci\u00f3n de registros en una tabla de destino en la misma base de datos o en otra base de datos seg\u00fan los resultados de combinar los registros con una tabla de origen, esta tabla origen puede ser &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/manualsqlserver.com\/?p=2321\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":2322,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,271,233,8],"tags":[37,74,120],"class_list":["post-2321","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-consultasdedatos","category-merge","category-sp","category-programacion","tag-insert","tag-merge","tag-update","nodate","item-wrap"],"_links":{"self":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2321","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2321"}],"version-history":[{"count":1,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2321\/revisions"}],"predecessor-version":[{"id":2326,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2321\/revisions\/2326"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/media\/2322"}],"wp:attachment":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2321"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2321"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2321"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}