{"id":2553,"date":"2021-08-03T01:30:07","date_gmt":"2021-08-03T01:30:07","guid":{"rendered":"https:\/\/manualsqlserver.com\/?p=2553"},"modified":"2021-08-03T01:30:08","modified_gmt":"2021-08-03T01:30:08","slug":"cursores-con-variable-tipo-tabla-y-contadores","status":"publish","type":"post","link":"https:\/\/manualsqlserver.com\/?p=2553","title":{"rendered":"Cursores con variable tipo tabla y contadores"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/08\/ManualSQL_CursorFechasContadores__D.png\"><img loading=\"lazy\" decoding=\"async\" width=\"220\" height=\"260\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/08\/ManualSQL_CursorFechasContadores__D.png\" alt=\"\" class=\"wp-image-2554\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Cursor con variable tipo tabla y contadores<\/h2>\n\n\n\n<p>En este art\u00edculo se utiliza un cursor para mostrar un reporte de acuerdo a registros que tienen valores enteros, de los cuales se hace un an\u00e1lisis para insertar registros en el reporte como entradas y salidas.<\/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><a href=\"https:\/\/manualsqlserver.com\/?p=3433\" target=\"_blank\" rel=\"noreferrer noopener\">Cursores en SQL Server<\/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=117\" target=\"_blank\" rel=\"noreferrer noopener\">Creaci\u00f3n de tablas<\/a><\/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 style=\"font-size:24px\"><strong>Desarrollando el ejercicio<\/strong><\/p>\n\n\n\n<p><strong>Se va a usar la base de datos Northwind, si no la tiene puede crear cualquier otra base de datos.<\/strong><\/p>\n\n\n\n<p>use Northwind<br>go<br>set dateformat dmy<br>go<br>Drop table if exists Eventos<br>go<br>Create table Eventos<br>(<br>IDEventos int identity,<br>FechaRegistro Datetime,<br>Evento nvarchar(20),<br>Entrada int,<br>Salida int,<br>constraint IdEventosPK Primary key (IDEventos)<br>)<br>go<\/p>\n\n\n\n<p style=\"font-size:24px\"><strong>Insertando los registros<\/strong><\/p>\n\n\n\n<p>insert into Eventos<br>values<br>('21\/03\/2021 14:54:45', 'CONTADOR',1,0),<br>('21\/03\/2021 14:54:41', 'CONTADOR',3,1),<br>('21\/03\/2021 14:54:38', 'CONTADOR',2,1),<br>('21\/03\/2021 14:54:34', 'CONTADOR',0,2),<br>('21\/03\/2021 14:54:26', 'CONTADOR',1,4),<br>('21\/03\/2021 14:54:14', 'CONTADOR',1,0)<br>go<br>Listado de los registros<br>Select * from Eventos<br>go<br>La lista de registros de la tabla 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\/2021\/08\/ManualSQL_CursorFechasContadores_01.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/08\/ManualSQL_CursorFechasContadores_01.png\" alt=\"\" class=\"wp-image-2555\" width=\"810\" height=\"332\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/08\/ManualSQL_CursorFechasContadores_01.png 601w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/08\/ManualSQL_CursorFechasContadores_01-300x123.png 300w\" sizes=\"auto, (max-width: 810px) 100vw, 810px\" \/><\/a><\/figure>\n\n\n\n<p><strong>En la figura anterior podemos notar que el primer registro tiene una entrada y no tienen salidas, el cursor mostrar\u00e1 entonces para ese registro una entrada, para el segundo registro, tiene 3 entradas y una salida, se debe mostrar entonces 04 registros, 03 de entrada y 01 de salida.<\/strong><\/p>\n\n\n\n<p class=\"has-large-font-size\"><strong>Desarrollando el Cursor<\/strong><\/p>\n\n\n\n<p>Declare cursorEventos cursor for select * from Eventos<br>Open cursorEventos<br>Declare @ReporteEventos Table<br>(<br>IDEventos int,<br>FechaRegistro Datetime,<br>Evento nvarchar(20),<br>[Entrada\/Salida] nvarchar(20)<br>)<br>Declare @IDEventos int , @FechaRegistro Datetime, @Evento nvarchar(20),<br>@Entrada int, @Salida int<br>Fetch cursorEventos into @IDEventos, @FechaRegistro, @Evento, @Entrada, @Salida<br>while (@@FETCH_STATUS = 0)<br>Begin<br>Declare @ContadorEntradas int = 0<br>while (@ContadorEntradas &lt; @Entrada)<br>Begin<br>insert into @ReporteEventos values<br>(@IDEventos,@FechaRegistro, @Evento,'ENTRADA')<br>Set @ContadorEntradas += 1<br>End<br>Declare @ContadorSalidas int = 0<br>while (@ContadorSalidas &lt; @Salida)<br>Begin<br>insert into @ReporteEventos values<br>(@IDEventos,@FechaRegistro, @Evento,'SALIDA')<br>Set @ContadorSalidas += 1<br>End<br>Fetch cursorEventos into @IDEventos, @FechaRegistro, @Evento, @Entrada, @Salida<br>End<br>Close cursorEventos<br>Deallocate cursorEventos<br>select * from @ReporteEventos<br>go<\/p>\n\n\n\n<p>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\/2021\/08\/ManualSQL_CursorFechasContadores_02.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/08\/ManualSQL_CursorFechasContadores_02.png\" alt=\"\" class=\"wp-image-2556\" width=\"784\" height=\"658\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/08\/ManualSQL_CursorFechasContadores_02.png 598w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/08\/ManualSQL_CursorFechasContadores_02-300x252.png 300w\" sizes=\"auto, (max-width: 784px) 100vw, 784px\" \/><\/a><\/figure>\n\n\n\n<p><\/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>La siguiente imagen muestra el resultado comparando la tabla con el resultado del cursor. Note lo que se ha se\u00f1alado, el registro con ID n\u00famero 2 tiene 03 entradas, en el cursor se han insertado 03 registros, la selecci\u00f3n est\u00e1 con color <strong>azul<\/strong>, el mismo registro tiene una salida, en el cursor se ha insertado un registro, la selecci\u00f3n est\u00e1 con color <strong>rojo<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/08\/ManualSQL_CursorFechasContadores_03.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/08\/ManualSQL_CursorFechasContadores_03.png\" alt=\"\" class=\"wp-image-2557\" width=\"843\" height=\"407\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/08\/ManualSQL_CursorFechasContadores_03.png 876w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/08\/ManualSQL_CursorFechasContadores_03-300x145.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/08\/ManualSQL_CursorFechasContadores_03-768x372.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2021\/08\/ManualSQL_CursorFechasContadores_03-795x385.png 795w\" sizes=\"auto, (max-width: 843px) 100vw, 843px\" \/><\/a><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Cursor con variable tipo tabla y contadores En este art\u00edculo se utiliza un cursor para mostrar un reporte de acuerdo a registros que tienen valores enteros, de los cuales se hace un an\u00e1lisis para insertar registros en el reporte como entradas y salidas.<\/p><p><a class=\"more-link btn\" href=\"https:\/\/manualsqlserver.com\/?p=2553\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":2554,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[232],"tags":[71,73,171],"class_list":["post-2553","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cursoressql","tag-cursores-en-sql-server","tag-declare-cursor","tag-variable-tipo-tabla","nodate","item-wrap"],"_links":{"self":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2553","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=2553"}],"version-history":[{"count":2,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2553\/revisions"}],"predecessor-version":[{"id":2568,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/2553\/revisions\/2568"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/media\/2554"}],"wp:attachment":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2553"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2553"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2553"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}