{"id":2643,"date":"2022-05-11T20:30:10","date_gmt":"2022-05-11T20:30:10","guid":{"rendered":"https:\/\/manualsqlserver.com\/?p=2643"},"modified":"2022-08-03T18:48:21","modified_gmt":"2022-08-03T18:48:21","slug":"cursores-y-reporte-personalizado","status":"publish","type":"post","link":"https:\/\/manualsqlserver.com\/?p=2643","title":{"rendered":"Cursores y Reporte personalizado"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/05\/ManualSQL_Cursores_Reporte__D.png\"><img loading=\"lazy\" decoding=\"async\" width=\"220\" height=\"260\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/05\/ManualSQL_Cursores_Reporte__D.png\" alt=\"\" class=\"wp-image-2644\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Cursores y reporte personalizado<\/h2>\n\n\n\n<p>En este art\u00edculo se utiliza un cursor para mostrar las compras de los clientes y crear un reporte personalizado,  siempre se recomienda usar con cuidado los cursores, estos consumen recursos importantes en el servidor, siempre que use un  cursor eval\u00fae usar si es posible otras opciones, adem\u00e1s de que la instrucci\u00f3n Select del cursor tenga solamente los campos necesarios y los filtros adecuados.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p><strong>Para mayor informaci\u00f3n ver:<\/strong><br><a href=\"https:\/\/manualsqlserver.com\/?p=2553\" target=\"_blank\" rel=\"noreferrer noopener\">Variables tipo tabla<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=2078\" target=\"_blank\" rel=\"noreferrer noopener\">Cursores en Store procedures<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=314\" target=\"_blank\" rel=\"noreferrer noopener\">Procedimientos almacenados<\/a><br><a href=\"https:\/\/manualsqlserver.com\/?p=2565\" target=\"_blank\" rel=\"noreferrer noopener\">Cursores y pivot<\/a><\/p>\n\n\n\n<p><strong>Usando la base de datos Northwind<\/strong><\/p>\n\n\n\n<p>use Northwind<br>go<br><\/p>\n\n\n\n<p><strong>Un cursor para reportar los clientes,  los productos comprados y la cantidad de unidades<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code has-white-background-color has-background has-small-font-size\"><code>Declare cursorClientesCompras cursor \n\tfor \n\tselect \n\t\tC.CompanyName As 'Cliente', '' As Producto,'' As Cantidad\n\tfrom Customers As C\n\tjoin Orders As O on C.CustomerID = O.CustomerID\n\tjoin &#91;Order Details] As D on O.OrderID = D.OrderID\n\tjoin Products As P on D.ProductID = P.ProductID\nUnion\nselect \n\t\tC.CompanyName As 'Cliente', \n\t\tP.ProductName As Producto, sum(D.Quantity) As Cantidad\n\tfrom Customers As C\n\tjoin Orders As O on C.CustomerID = O.CustomerID\n\tjoin &#91;Order Details] As D on O.OrderID = D.OrderID\n\tjoin Products As P on D.ProductID = P.ProductID\n\tgroup by C.CompanyName , P.ProductName \norder by Cliente, Producto\nOpen cursorClientesCompras\nDeclare @Reporte table (NombreCliente nvarchar(50), NombreProducto nvarchar(50), Cantidad Numeric(9,2))\nDeclare @NombreCliente nvarchar(50), @NombreProducto nvarchar(50), @Cantidad Numeric(9,2)\nFetch cursorClientesCompras into @NombreCliente , @NombreProducto, @Cantidad\nDeclare @Puntero int = 0, @Anterior nvarchar(50)\nwhile (@@FETCH_STATUS = 0)\n\tBegin\n\t\tif @Puntero = 0\n\t\t\tBegin\n\t\t\t\tSet @Anterior = @NombreCliente\n\t\t\t\tinsert into @Reporte values (@NombreCliente , @NombreProducto, @Cantidad)\n\t\t\t\tSet @Puntero = 1\n\t\t\tEnd\n\t\tElse\n\t\t\tBegin\n\t\t\t\tif @NombreCliente = @Anterior\n\t\t\t\t\tBegin\n\t\t\t\t\t\tinsert into @Reporte values ('' , @NombreProducto, @Cantidad)\n\t\t\t\t\tEnd\n\t\t\tElse\n\t\t\t\t\tBegin\n\t\t\t\t\t\tinsert into @Reporte values (@NombreCliente , @NombreProducto, @Cantidad)\n\t\t\t\t\t\tSet @Anterior = @NombreCliente\n\t\t\t\t\tEnd\n\t\t\tEnd\n\t\tFetch cursorClientesCompras into @NombreCliente , @NombreProducto, @Cantidad\n\tEnd\nClose cursorClientesCompras\nDeallocate cursorClientesCompras\nselect NombreCliente As 'Cliente', NombreProducto As 'Producto', Cantidad\n\tfrom @Reporte\ngo<\/code><\/pre>\n\n\n\n<p>El resultado se muestra en la siguiente imagen<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/05\/ManualSQL_Cursores_Reporte_01.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/05\/ManualSQL_Cursores_Reporte_01.png\" alt=\"\" class=\"wp-image-2645\" width=\"728\" height=\"861\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/05\/ManualSQL_Cursores_Reporte_01.png 681w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2022\/05\/ManualSQL_Cursores_Reporte_01-254x300.png 254w\" sizes=\"auto, (max-width: 728px) 100vw, 728px\" \/><\/a><figcaption>Cursor y reporte personalizado<\/figcaption><\/figure>\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<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Cursores y reporte personalizado En este art\u00edculo se utiliza un cursor para mostrar las compras de los clientes y crear un reporte personalizado, siempre se recomienda usar con cuidado los cursores, estos consumen recursos importantes en el servidor, siempre que use un cursor eval\u00fae usar si es posible otras opciones, adem\u00e1s de que la instrucci\u00f3n &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/manualsqlserver.com\/?p=2643\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":2644,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[232,8],"tags":[70,51,171],"class_list":["post-2643","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cursoressql","category-programacion","tag-cursor","tag-select","tag-variable-tipo-tabla","nodate","item-wrap"],"_links":{"self":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2643","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=2643"}],"version-history":[{"count":2,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2643\/revisions"}],"predecessor-version":[{"id":2663,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2643\/revisions\/2663"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/media\/2644"}],"wp:attachment":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2643"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2643"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2643"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}