{"id":374,"date":"2017-06-01T00:25:09","date_gmt":"2017-06-01T00:25:09","guid":{"rendered":"http:\/\/www.manualsqlserver.com\/?p=374"},"modified":"2020-07-17T15:46:23","modified_gmt":"2020-07-17T15:46:23","slug":"funciones-de-cursor","status":"publish","type":"post","link":"https:\/\/manualsqlserver.com\/?p=374","title":{"rendered":"Funciones de cursor en SQL Server"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"230\" height=\"172\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_FuncionesCursor_D.png\" alt=\"\" class=\"wp-image-1378\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Funciones de Cursor<\/strong><\/h2>\n\n\n\n<p>Las funciones de cursor devuelven informaci\u00f3n de los cursores. (<a href=\"http:\/\/www.manualsqlserver.com\/?p=343\">Ver cursores<\/a>)<\/p>\n\n\n\n<p><strong>Las funciones de cursor son las siguientes:<\/strong><br><strong>@CURSOR_ROWS <\/strong><br><strong>CURSOR_STATUS<\/strong><br><strong>@@FETCH_STATUS<\/strong><\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"has-medium-font-size\"><strong>Funci\u00f3n @Cursor_rows<\/strong><\/p>\n\n\n\n<p>Devuelve el n\u00famero de filas del cursor abierto.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>Valor devuelto<\/td><td>Descripci\u00f3n<\/td><\/tr><tr><td>-m<\/td><td>El cursor se llena asincr\u00f3nicamente. El valor \u2013m es el n\u00famero de filas actualmente en el conjunto de claves.<\/td><\/tr><tr><td>-1<\/td><td>El cursor es din\u00e1mico. Como los cursores din\u00e1micos reflejan todos los cambios, el n\u00famero de filas correspondientes al cursor cambia constantemente. Nunca se puede afirmar que se han recuperado todas las filas que correspondan.<\/td><\/tr><tr><td>0<\/td><td>No se han abierto cursores, no hay filas calificadas para el \u00faltimo cursor abierto, o \u00e9ste se ha cerrado o su asignaci\u00f3n se ha cancelado.<\/td><\/tr><tr><td>n<\/td><td>El cursor est\u00e1 completamente relleno. El valor devuelto (n) es el n\u00famero total de filas del cursor.<\/td><\/tr><\/tbody><\/table><\/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\n\n\n<h2 class=\"wp-block-heading\"><strong>Ejemplos<\/strong><\/h2>\n\n\n\n<p>Usando Northwind<br>use Northwind<br>go<\/p>\n\n\n\n<p><strong>&#8212; Crear un cursor con los productos de categor\u00eda 5<\/strong><br><strong>&#8212; Antes de declarar y abrir el cursor<\/strong><br>select @@CURSOR_ROWS<br>go<br>Resultado: 0<\/p>\n\n\n\n<p>Declare CursorProductosCategoria5 cursor for<br>select * from Products where CategoryID = 5<br>go<br>Open CursorProductosCategoria5<br>go<br><strong>Despu\u00e9s de abrir el cursor<\/strong><br>select @@CURSOR_ROWS<br>go<br>Resultado: -1<br><strong>Leer los datos del cursor<\/strong><br>Fetch CursorProductosCategoria5<br>go<br><strong>Cerrar y Liberar el cursor<\/strong><br>Close CursorProductosCategoria5<br>Deallocate CursorProductosCategoria5<br>go<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Funci\u00f3n @@FETCH_STATUS<\/strong><\/p>\n\n\n\n<p>Devuelve el estado de la \u00faltima instrucci\u00f3n que lee los datos del cursor (Fetch). El tipo de dato devuelto es Entero.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>Valor devuelto<\/td><td>Descripci\u00f3n<\/td><\/tr><tr><td>0<\/td><td>La instrucci\u00f3n FETCH se ejecut\u00f3 correctamente y muestra registro.<\/td><\/tr><tr><td>-1<\/td><td>La instrucci\u00f3n FETCH no se ejecut\u00f3 correctamente y no muestra registro.<\/td><\/tr><tr><td>-2<\/td><td>Falta la fila capturada.<\/td><\/tr><tr><td>-9<\/td><td>El cursor no est\u00e1 realizando una operaci\u00f3n de b\u00fasqueda.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Generalmente @@Fetch_Status es usada con la estructura While para leer los registros del cursor.<\/p>\n\n\n\n<p><strong>Ejemplo<\/strong><br><strong>&#8212; Crear un cursor para mostrar los Empleados<\/strong><br>Declare cursorEmpleados Cursor for<br>select E.EmployeeID As &#8216;C\u00f3digo&#8217;, Empleado = E.LastName + Space(1)+ E.FirstName from Employees As E order by Empleado<br>Open cursorEmpleados<br>Fetch from cursorEmpleados<br>Print &#8216;========= EMPLEADOS ============= &#8216;<br>While @@FETCH_STATUS = 0<br>Begin<br>Fetch from cursorEmpleados<br>End<br>Close cursorEmpleados<br>Deallocate cursorEmpleados<br>go<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Funci\u00f3n Cursor_Status<\/strong><\/p>\n\n\n\n<p>Permite determinar si el resultado de un procedimiento almacenado ha devuelto un cursor y un conjunto de resultados al recibir un par\u00e1metro.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Valor<\/strong><\/td><td><strong>Descripci\u00f3n<\/strong><\/td><\/tr><tr><td>-1<\/td><td>El cursor est\u00e1 cerrado.<\/td><\/tr><tr><td>1<\/td><td>El cursor tiene al menos una fila.<\/td><\/tr><tr><td>0<\/td><td>El conjunto de resultados del cursor est\u00e1 vac\u00edo.<\/td><\/tr><tr><td>-3<\/td><td>No existe un cursor con el nombre indicado.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Ejemplo<\/strong><\/h2>\n\n\n\n<p><strong>Crear un cursor con las categor\u00edas<\/strong><br><strong>Antes de Crear el cursor<\/strong><br>select CURSOR_STATUS (&#8216;global&#8217;,&#8217;cursorCategorias&#8217;) As &#8216;Antes de Crear&#8217;<br>go<br>Resultado: -3<\/p>\n\n\n\n<p>Declare cursorCategorias cursor for Select C.CategoryID, C.CategoryName from Categories As C<br>go<br><strong>Antes de abrir el cursor<\/strong><br>select CURSOR_STATUS (&#8216;global&#8217;,&#8217;cursorCategorias&#8217;) As &#8216;Antes de abrir&#8217;<br>go<br>Resultado: -1<\/p>\n\n\n\n<p><strong>Despues de abrir el cursor<\/strong><br>Open cursorCategorias<br>go<br>select CURSOR_STATUS (&#8216;global&#8217;,&#8217;cursorCategorias&#8217;) As &#8216;Antes de abrir&#8217;<br>go<br>Resultado: 1<\/p>\n\n\n\n<p><strong>Despues de Cerrar el cursor<\/strong><br>Close cursorCategorias<br>go<br>select CURSOR_STATUS (&#8216;global&#8217;,&#8217;cursorCategorias&#8217;) As &#8216;Antes de abrir&#8217;<br>go<br>Resultado: -1<\/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","protected":false},"excerpt":{"rendered":"<p>Funciones de Cursor Las funciones de cursor devuelven informaci\u00f3n de los cursores. (Ver cursores) Las funciones de cursor son las siguientes:@CURSOR_ROWS CURSOR_STATUS@@FETCH_STATUS<\/p><p><a class=\"more-link btn\" href=\"https:\/\/manualsqlserver.com\/?p=374\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":1378,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[232,6],"tags":[116,72,117,53],"class_list":["post-374","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cursoressql","category-funcionessql","tag-cursor_rows","tag-cursores-sql-server","tag-fetch_status","tag-sqlserver","nodate","item-wrap"],"_links":{"self":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/374","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=374"}],"version-history":[{"count":1,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/374\/revisions"}],"predecessor-version":[{"id":1379,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/374\/revisions\/1379"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/media\/1378"}],"wp:attachment":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=374"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=374"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=374"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}