{"id":2365,"date":"2020-12-18T01:14:40","date_gmt":"2020-12-18T01:14:40","guid":{"rendered":"http:\/\/manualsqlserver.com\/?p=2365"},"modified":"2021-01-02T02:05:49","modified_gmt":"2021-01-02T02:05:49","slug":"output-en-merge-sql-server","status":"publish","type":"post","link":"https:\/\/manualsqlserver.com\/?p=2365","title":{"rendered":"Output en Merge SQL Server"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge__D.png\"><img loading=\"lazy\" decoding=\"async\" width=\"220\" height=\"260\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge__D.png\" alt=\"\" class=\"wp-image-2366\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Usando Output de Merge<\/strong><\/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.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p style=\"font-size:24px\"><strong>Para m\u00e1s informaci\u00f3n ver:<\/strong><\/p>\n\n\n\n<p style=\"font-size:22px\"><strong><a href=\"https:\/\/manualsqlserver.com\/?p=368\" target=\"_blank\" rel=\"noreferrer noopener\">Merge en SQL Server<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=2321\" target=\"_blank\" rel=\"noreferrer noopener\">Merge con Select<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=2330\" target=\"_blank\" rel=\"noreferrer noopener\">Merge en Graph Tables<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=294\" target=\"_blank\" rel=\"noreferrer noopener\">Insertar registros<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=300\" target=\"_blank\" rel=\"noreferrer noopener\">Actualizar registros<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=522\" target=\"_blank\" rel=\"noreferrer noopener\">Variables tipo tabla<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=385\" target=\"_blank\" rel=\"noreferrer noopener\">Triggers<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=117\" target=\"_blank\" rel=\"noreferrer noopener\">Crear tablas<\/a><\/strong><\/p>\n\n\n\n<p>En este art\u00edculo se va explicar el uso de la cl\u00e1usula Output en Merge para poder visualizar la acci\u00f3n realizada en cada registro tomado en cuenta en la instrucci\u00f3n. Se sugiere utilizar esta opci\u00f3n para poder analizar el resultado de la instrucci\u00f3n Merge en un entorno de desarrollo antes de pasar a producci\u00f3n cualquier proceso.<\/p>\n\n\n\n<script async=\"\" src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\" style=\"display:block; text-align:center;\" data-ad-layout=\"in-article\" data-ad-format=\"fluid\" data-ad-client=\"ca-pub-2636008503986218\" 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>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:22px\"><strong>Ejercicio 1<\/strong><\/p>\n\n\n\n<p>Crearemos dos tablas de Clientes, una con los datos no actualizados y otra con los datos actualizados. Luego se va a ejecutar el Merge mostrando las acciones usando la cl\u00e1usula Output.<\/p>\n\n\n\n<p>Create table Clientes<br>(<br>ClientesCodigo nchar(5),<br>ClientesRazonSocial nvarchar(100),<br>ClientesDireccion nvarchar(100),<br>ClientesMontoCredito Numeric(9,2),<br>constraint ClientesPK primary key (ClientesCodigo)<br>)<br>go<\/p>\n\n\n\n<p style=\"font-size:18px\"><strong>Insertamos Clientes a la tabla<\/strong><\/p>\n\n\n\n<p>Insert into Clientes Values<br>(&#8216;00001&#8242;,&#8217;Fernando Luque&#8217;,&#8217;Av. San Bartolo 3994&#8242;,15000),<br>(&#8216;00002&#8242;,&#8217;Raquel Terranova&#8217;,&#8217;Av. Los Paramos 4456&#8242;,5000),<br>(&#8216;00003&#8242;,&#8217;Carlos Mendoza&#8217;,&#8217;Av. Brasil 445&#8242;, 3500),<br>(&#8216;00004&#8242;,&#8217;Lucas Maldonado&#8217;,&#8217;Av. La Rep\u00fablica 643&#8242;, 10000),<br>(&#8216;00005&#8242;,&#8217;Ingrid Ch\u00e1vez&#8217;,&#8217;Av. Loreto 994&#8242;, 3800),<br>(&#8216;00006&#8242;,&#8217;Rossana Moreno&#8217;,&#8217;Av. La Mar 464&#8242;, 12000)<br>go<br><strong>Listado de los clientes<br><\/strong>select * from clientes<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\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_01.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_01.png\" alt=\"\" class=\"wp-image-2367\" width=\"722\" height=\"265\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_01.png 705w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_01-300x111.png 300w\" sizes=\"auto, (max-width: 722px) 100vw, 722px\" \/><\/a><\/figure>\n\n\n\n<p><strong>Tabla de Clientes llamada ClientesNueva con actualizaciones, clientes nuevos y clientes que no existen en la tabla inicial.<\/strong><\/p>\n\n\n\n<p>Create table ClientesNueva<br>(<br>ClientesNuevaCodigo nchar(5),<br>ClientesNuevaRazonSocial nvarchar(100),<br>ClientesNuevaDireccion nvarchar(100),<br>ClientesNuevaMontoCredito Numeric(9,2),<br>constraint ClientesNuevaPK primary key (ClientesNuevaCodigo)<br>)<br>go<\/p>\n\n\n\n<p style=\"font-size:18px\"><strong>Insertar datos en ClientesNueva, note que existen clientes en la tabla ClientesNueva que no existen en la tabla Clientes, otros que est\u00e1n con los  datos cambiados y hay clientes en la tabla ClientesNueva que no existe en la tabla Clientes.<\/strong><\/p>\n\n\n\n<p>Insert into ClientesNueva Values<br>(&#8216;00001&#8242;,&#8217;Fernando Luque&#8217;,&#8217;Av. San Juan 2123&#8242;,18000),<br>(&#8216;00002&#8242;,&#8217;Raquel Terranova Llanos&#8217;,&#8217;Av. Los Paramos 4456&#8242;,8000),<br>(&#8216;00004&#8242;,&#8217;Lucas Maldonado&#8217;,&#8217;Av. La Rep\u00fablica 643&#8242;, 10000),<br>(&#8216;00005&#8242;,&#8217;Ingrid Ch\u00e1vez&#8217;,&#8217;Av. Loreto 994&#8242;, 25000),<br>(&#8216;00006&#8242;,&#8217;Rossana Moreno&#8217;,&#8217;Av. La Mar 464&#8242;, 12000),<br>(&#8216;00007&#8242;,&#8217;Cecilia P\u00e9rez Cas\u00f3s&#8217;,&#8217;Av. Los Laureles 963&#8242;, 2000),<br>(&#8216;00008&#8242;,&#8217;Luis Mendiola S\u00e1nchez&#8217;,&#8217;Av. Policial 1464&#8242;, 18000)<br>go<br>Listado de ClientesNueva<br>Select * from ClientesNueva<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\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_02.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_02.png\" alt=\"\" class=\"wp-image-2368\" width=\"713\" height=\"236\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_02.png 830w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_02-300x100.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_02-768x255.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_02-795x264.png 795w\" sizes=\"auto, (max-width: 713px) 100vw, 713px\" \/><\/a><figcaption>Tabla: ClientesNueva<\/figcaption><\/figure>\n\n\n\n<p style=\"font-size:18px\"><strong>Note lo siguiente:<br><\/strong>Clientes nuevos: clientes con c\u00f3digos 00007 y 00008<br>Clientes con datos actualizados: clientes con c\u00f3digos 00001, 00002 y 00005<br>Clientes que no figuran en la tabla nueva: cliente con c\u00f3digo 00003<br>La imagen siguiente muestra la comparaci\u00f3n de las dos tablas.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_03.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_03.png\" alt=\"\" class=\"wp-image-2369\" width=\"738\" height=\"581\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_03.png 892w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_03-300x236.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_03-768x605.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_03-795x627.png 795w\" sizes=\"auto, (max-width: 738px) 100vw, 738px\" \/><\/a><\/figure>\n\n\n\n<p><strong>Usando el Merge y mostrando las accciones realizadas.<\/strong><br>Tabla que se va a sincronizar: Tabla destino Clientes usando como origen ClientesNueva.<\/p>\n\n\n\n<p>Merge<br>Clientes USING ClientesNueva<br>ON Clientes.ClientesCodigo = ClientesNueva.ClientesNuevaCodigo<br>When MATCHED THEN<br>UPDATE SET Clientes.ClientesRazonSocial = ClientesNueva.ClientesNuevaRazonSocial,<br>Clientes.ClientesDireccion = ClientesNueva.ClientesNuevaDireccion ,<br>Clientes.ClientesMontoCredito = ClientesNueva.ClientesNuevaMontoCredito<br>When NOT MATCHED by Target THEN<br>INSERT (ClientesCodigo, ClientesRazonSocial,<br>ClientesDireccion, ClientesMontoCredito)<br>VALUES (ClientesNueva.ClientesNuevaCodigo, ClientesNueva.ClientesNuevaRazonSocial,<br>ClientesNueva.ClientesNuevaDireccion, ClientesNueva.ClientesNuevaMontoCredito)<br>When NOT MATCHED BY Source THEN<br>DELETE<br><strong>OUTPUT $action As &#8216;Acci\u00f3n&#8217;,<br>Inserted.ClientesCodigo As &#8216;C\u00f3digo&#8217;,<br>Inserted.ClientesRazonSocial As &#8216;Nombre&#8217;,<br>Inserted.ClientesDireccion As &#8216;Direcci\u00f3n&#8217;,<br>Inserted.ClientesMontoCredito As &#8216;Cr\u00e9dito&#8217;,<br>Deleted.ClientesCodigo As &#8216;C\u00f3digo&#8217;,<br>Deleted.ClientesRazonSocial As &#8216;Nombre&#8217;,<br>Deleted.ClientesDireccion As &#8216;Direcci\u00f3n&#8217;,<br>Deleted.ClientesMontoCredito As &#8216;Cr\u00e9dito&#8217;;<br>SELECT @@ROWCOUNT;<\/strong><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\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_04.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_04-1024x312.png\" alt=\"\" class=\"wp-image-2370\" width=\"811\" height=\"246\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_04-1024x312.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_04-300x92.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_04-768x234.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_04.png 1167w\" sizes=\"auto, (max-width: 811px) 100vw, 811px\" \/><\/a><figcaption>Resultado de la instrucci\u00f3n Merge<\/figcaption><\/figure>\n\n\n\n<p style=\"font-size:18px\"><strong>Note lo siguiente: <\/strong><\/p>\n\n\n\n<p class=\"has-pale-cyan-blue-background-color has-background\" style=\"font-size:18px\">Los clientes con c\u00f3digos 00001, 00002, 00004, 00005 y 00006 se han actualizado, en la primera columna que muestra la acci\u00f3n realizada aparace <strong>UPDATE<\/strong>. Los clientes con c\u00f3digos 00007 y 00008 se han insertado, en la columna acci\u00f3n aparece <strong>INSERT<\/strong>. El cliente con c\u00f3digo 00003 se ha eliminado, en la columna acci\u00f3n aparece <strong>DELETE<\/strong>.<\/p>\n\n\n\n<p>Mostramos las dos tablas.<br>Select * From Clientes<br>Select * From ClientesNueva<br>go<br>El resultado se muestra en la siguiente imagen<br>Note que las dos tablas tiene los mismos registros.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_05.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_05.png\" alt=\"\" class=\"wp-image-2371\" width=\"753\" height=\"431\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_05.png 847w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_05-300x172.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_05-768x440.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_05-795x455.png 795w\" sizes=\"auto, (max-width: 753px) 100vw, 753px\" \/><\/a><figcaption>Resultado en las tablas Clientes y ClientesNueva despu\u00e9s del Merge<\/figcaption><\/figure>\n\n\n\n<p style=\"font-size:22px\"><strong>Ejercicio 2<\/strong><\/p>\n\n\n\n<p style=\"font-size:18px\"><strong>Crearemos dos tablas Ubicacion y UbicacionVisita, luego se van a sincronizar usando Merge.<\/strong><\/p>\n\n\n\n<p>Create table Ubicacion<br>(<br>UbicacionCodigo int,<br>UbicacionDireccion nvarchar(100)<br>)<br>go<\/p>\n\n\n\n<p>Create table UbicacionVisita<br>(<br>UbicacionCodigo int,<br>UbicacionDireccion nvarchar(100)<br>)<br>go<\/p>\n\n\n\n<p><strong>Insertamos datos<br><\/strong>Insert into Ubicacion values<br>(1,&#8217;Trujillo Centro&#8217;),<br>(2,&#8217;Lima La Victoria&#8217;) ,<br>(3,&#8217;Piura San Cristobal&#8217;)<br>go<\/p>\n\n\n\n<p>Insert into UbicacionVisita values<br>(1,&#8217;Trujillo Victor Larco&#8217;) ,<br>(3,&#8217;Cajamarca Ba\u00f1os del Inca&#8217;),<br>(4,&#8217;Cusco San Blas&#8217;)<br>go<\/p>\n\n\n\n<p style=\"font-size:22px\"><strong>Usando el Merge y la cl\u00e1usula Output<\/strong><\/p>\n\n\n\n<p>MERGE Ubicacion D<br>USING UbicacionVisita O ON D.UbicacionCodigo=O.UbicacionCodigo<br>WHEN MATCHED THEN<br>UPDATE SET UbicacionDireccion=O.UbicacionDireccion<br>WHEN NOT MATCHED By TARGET THEN<br>INSERT (UbicacionCodigo,UbicacionDireccion)<br>VALUES (O.UbicacionCodigo,O.UbicacionDireccion)<br>WHEN NOT MATCHED BY SOURCE THEN<br>DELETE<br>OUTPUT Deleted.<em>, $action As &#8216;Acci\u00f3n&#8217;, Inserted.<\/em> ;<br>go<br><strong>El resultado se muestra en la siguiente imagen<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_06.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_06.png\" alt=\"\" class=\"wp-image-2372\" width=\"765\" height=\"206\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_06.png 806w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_06-300x81.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_06-768x208.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_06-795x215.png 795w\" sizes=\"auto, (max-width: 765px) 100vw, 765px\" \/><\/a><\/figure>\n\n\n\n<p class=\"has-pale-cyan-blue-background-color has-background\" style=\"font-size:18px\"><strong>El resultado del Output muestra que se ha insertado la ubicaci\u00f3n \u00abCusco San Blas\u00bb con el c\u00f3digo 4, se ha actualizado el registro con c\u00f3digo 1, los datos cambiados y borrados fueron \u00abTrujillo Centro\u00bb y se actualizaron por \u00abTrujillo Victor Larco\u00bb, el registro con c\u00f3digo 2 fue eliminado y el registro con c\u00f3digo 3 fue actualizado, el dato de \u00abPiura San Cristobal\u00bb fue cambiado por \u00abCajamarca Ba\u00f1os del Inca\u00bb<\/strong><\/p>\n\n\n\n<p style=\"font-size:22px\"><strong>Consideraciones importantes en Merge<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Para ejecutar la instrucci\u00f3n MERGE debe tener el permiso SELECT en la tabla SOURCE y los permisos INSERT, UPDATE y DELETE en la tabla TARGET.<\/strong><\/li><li><strong>La instrucci\u00f3n MERGE requiere un punto y coma (;) al finalizar la instrucci\u00f3n. De lo contrario, se genera un error cuando una sentencia MERGE no termina con punto y coma.<\/strong><\/li><li><strong>Se puede usar @@ROWCOUNT despu\u00e9s de Merge para obtener el n\u00famero total de filas insertadas, actualizadas y eliminadas.<\/strong><\/li><li><strong>La instrucci\u00f3n MERGE mejora el rendimiento ya que todos los datos se leen y procesan solo una vez, mientras que en versiones anteriores se deben escribir tres declaraciones diferentes para procesar tres actividades diferentes (INSERT, UPDATE o DELETE), en cuyo caso los datos en las tablas de origen y destino se eval\u00faan y procesan varias veces; al menos una vez por cada declaraci\u00f3n.<\/strong><\/li><li><strong>Se debe especificar al menos una de las tres cl\u00e1usulas MATCHED cuando se usa la instrucci\u00f3n MERGE; las cl\u00e1usulas MATCHED se pueden especificar en cualquier orden.<\/strong><\/li><li><strong>Para cada acci\u00f3n INSERT, UPDATE o DELETE especificada en la instrucci\u00f3n MERGE, SQL Server dispara los Triggers AFTER correspondientes definidos en la tabla de destino, pero no garantiza el orden. Los activadores definidos para la misma acci\u00f3n respetan el orden que especifique.<\/strong><\/li><\/ul>\n\n\n\n<script async=\"\" src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\" style=\"display:block; text-align:center;\" data-ad-layout=\"in-article\" data-ad-format=\"fluid\" data-ad-client=\"ca-pub-2636008503986218\" data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<p style=\"font-size:22px\"><strong>Ejercicio 3<\/strong><\/p>\n\n\n\n<p>Merge con Output usando variables tipo tabla.<br>En este ejercicio se va a crear una tabla de productos, luego se va a usar la instrucci\u00f3n Merge teniendo en cuenta los datos de una variable tipo tabla.<\/p>\n\n\n\n<p>Create table ProductosMerge<br>(<br>Codigo int,<br>Descripcion nvarchar(50),<br>Stock Numeric(9,2),<br>Precio Numeric(9,2),<br>constraint ProductosMergePK primary key (Codigo)<br>)<\/p>\n\n\n\n<p><strong>Insertamos productos<\/strong><\/p>\n\n\n\n<p>Insert into ProductosMerge values<br>( 1 , &#8216;Teclado&#8217; , 10 , 55 ),<br>( 2 , &#8216;Monitor&#8217; , 5 , 220),<br>( 3 , &#8216;Mouse&#8217; , 50 , 25 ),<br>( 4 , &#8216;Impresora&#8217; , 15, 350 )<br>go<\/p>\n\n\n\n<p>Listado de los productos<br>select * from ProductosMerge<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\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_07.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_07.png\" alt=\"\" class=\"wp-image-2373\" width=\"533\" height=\"284\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_07.png 385w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_07-300x160.png 300w\" sizes=\"auto, (max-width: 533px) 100vw, 533px\" \/><\/a><\/figure>\n\n\n\n<p><strong>Se va a declarar una variable tipo tabla con los datos a actualizar.<br><\/strong>DECLARE @Productos Table<br>(<br>Codigo int,<br>Descripcion nvarchar(50),<br>Stock Numeric(9,2),<br>Precio Numeric(9,2)<br>)<br>Insert into @Productos<br>Select 1 As Codigo, &#8216;Teclado Gamer&#8217; As Descripcion, 15 As Stock, 70 As Precio<br>Union<br>Select 3, &#8216;Mouse Shadow Optical&#8217; , 55 , 30<br>Union<br>SELECT 4, &#8216;Impresora Epson L355&#8217; , 12 , 450<br>Union<br>SELECT 5, &#8216;Laptop Samsung Core i7&#8217; , 5 , 1200<br>Union<br>SELECT 6, &#8216;Escritorio gerencial 1.40&#8217; , 2 , 650<br><strong>Merge into ProductosMerge As D<br>USING @Productos As O<br>ON D.Codigo = O.Codigo<br>When Matched and<br>(D.Descripcion &lt;&gt; O.Descripcion or D.Stock &lt;&gt; O.Stock or D.Precio &lt;&gt; O.Precio)<br>Then UPDATE<br>SET D.Descripcion = O.Descripcion, D.Stock = O.Stock, D.Precio = O.Precio<br>When NOT Matched by Target then<br>Insert values ( O.Codigo, O.Descripcion, O.Stock, O.Precio)<br>When NOT Matched BY Source<br>Then DELETE<br>OUTPUT $action As &#8216;Acci\u00f3n&#8217;,<br>inserted.Descripcion As &#8216;Nueva Descripci\u00f3n&#8217;,<br>inserted.Stock As &#8216;Nuevo Stock&#8217;,<br>inserted.Precio As &#8216;Nuevo Precio&#8217;,<br>deleted.Descripcion As &#8216;Descripci\u00f3n anterior&#8217;,<br>deleted.Stock As &#8216;Stock anterior&#8217;,<br>deleted.Precio As &#8216;Precio anterior&#8217;;<br>go<\/strong><br>La salida del OutPut se muestra en la siguiente imagen<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_08.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_08.png\" alt=\"\" class=\"wp-image-2374\" width=\"721\" height=\"193\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_08.png 951w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_08-300x80.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_08-768x206.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_08-795x213.png 795w\" sizes=\"auto, (max-width: 721px) 100vw, 721px\" \/><\/a><\/figure>\n\n\n\n<p><strong>Listado de la tabla ProductosMerge<br><\/strong>SELECT * FROM ProductosMerge<br>go<br><strong>El resultado se muestra en la siguiente imagen<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_09.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_09.png\" alt=\"\" class=\"wp-image-2375\" width=\"690\" height=\"337\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_09.png 473w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/12\/ManualSQL_OutPutMerge_09-300x147.png 300w\" sizes=\"auto, (max-width: 690px) 100vw, 690px\" \/><\/a><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Usando Output de Merge 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.<\/p><p><a class=\"more-link btn\" href=\"https:\/\/manualsqlserver.com\/?p=2365\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":2366,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[271,8],"tags":[74,270,44,269],"class_list":["post-2365","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-merge","category-programacion","tag-merge","tag-merge-sql-server","tag-output","tag-using","nodate","item-wrap"],"_links":{"self":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2365","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=2365"}],"version-history":[{"count":2,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2365\/revisions"}],"predecessor-version":[{"id":2407,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2365\/revisions\/2407"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/media\/2366"}],"wp:attachment":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2365"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2365"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2365"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}