Saltar al contenido

Ejemplos de cursores en sql server


Un cursor es un objeto que nos permite recorrer una tabla de forma secuencial, es decir, acceder a sus registros uno a uno. En este artículo vamos a ver dos ejemplos de cursores en sql server: el primero para recorrer todos los registros de la tabla y el segundo para recorrer solo algunos de ellos. Además, vamos a realizar algunos ejercicios prácticos para practicar lo aprendido.

Índice

    Las desventajas de usar los cursores son :

    -Los cursores consumen muchos recursos.

    -Pueden bloquear tablas.

    -Son lentos.

    -No son tan fáciles de usar como otros métodos para hacer lo mismo, como por ejemplo, WHILE Y CTE.

    Pero tambien los cursores permiten realizar una serie de tareas que con otros métodos no podríamos hacer.

    Ejemplo # cursores:

    • Recorrer una tabla y modificar algunos campos.
    • Hacer un backup de los datos de la tabla en base de datos de produccion.
    • pasos para hacer un cursor:
    • Declarar un cursor.
    • Abrir el cursor.
    • Leer datos del cursor.
    • Cerrar el cursor.

    Cursor de ejemplo en sql server

    Pedidos la cual debe llevar a un historico todos los pedidos de un año especifico que cumplan con cierta condicion.

    Para ello necesitaremos una tabla HistoricoPedidos en donde almacenaremos los pedidos del año especifico.

    La primera sentencia que debemos de tener en nuestro script de cursores será la siguiente:

    • DECLARE @PEDIDOS_ID INT
    • DECLARE ITEM_CURSOR CURSOR  — Here we prepare the cursor and give the select statement to iterate through
    • FOR
    • SELECT *
    • FROM PEDIDOS WHERE YEAR = 2022
    • — Lo primero que debemos de hacer es declarar el cursor, en este caso le hemos puesto el nombre de ITEM_CURSOR.
    • — Luego le asignamos la sentencia SELECT que contiene los registros de la tabla PEDIDOS
    • OPEN ITEM_CURSOR
    • FETCH NEXT FROM ITEM_CURSOR INTO @PEDIDOS_ID
    • WHILE @@FETCH_STATUS = 0 –If the fetch went well then we go for it
    • BEGIN
    • –AQUI EJECUTAMOS LAS SENTENCIAS DE LUGAR
    • FETCH NEXT FROM ITEM_CURSOR INTO @PEDIDOS_ID
    • END
    • CURSOR; — CERRAMOS EL CURSOR
    • DEALLOCATE ITEM
    • _CURSOR; — LIBERAMOS LA MEMORIA ASIGNADA AL CURSOR.

    En este ejemplo hemos recorrido todos los registros de la tabla PEDIDOS donde el año es 2022. Supongo que Microsoft los incluyó en SQL Server por una razón, por lo que deben tener un lugar donde puedan usarse de manera eficiente. Aunque en la mayoría de los casos, un cursores puede evitarse usando conjuntos, existen algunas situaciones en las que un cursores es la solución más eficiente.

    Como crear un cursor de base de datos ?

    Luego de explicado en la seccion previa ya tenemos una idea general de ocmo hacer un cursor, ademas aprendimos las ventas y desventajas de los mismos en sql server. en esta seccion te mostramos cada paso de su creacion ademas te dejamos una base de prueba para que puedas iniciar.

    Para crear un cursor en SQL, puede utilizar la declaración DECLARE CURSOR. Aquí tienes un ejemplo de cómo crear un cursor que selecciona todos los datos de la tabla «customers» de la base de datos northwind:

    DECLARE customer_cursor CURSOR FOR
    SELECT * FROM customers;
    

    Para abrir el cursor y empezar a recorrer los resultados, puedes usar la instrucción OPEN:

    OPEN customer_cursor;
    

    Para recuperar cada fila del cursor, puedes usar la instrucción FETCH. Por ejemplo:

    FETCH NEXT FROM customer_cursor;
    

    Esto recuperará la primera fila del cursor y la almacenará en variables especificadas en la instrucción FETCH. Por ejemplo:

    DECLARE @customer_id INT;
    DECLARE @customer_name VARCHAR(255);
    
    FETCH NEXT FROM customer_cursor
    INTO @customer_id, @customer_name;
    

    Puedes seguir llamando a FETCH para recorrer todas las filas del cursor. Cuando ya no queden más filas, FETCH devolverá el valor «NULL».

    Cuando hayas terminado de trabajar con el cursor, debes cerrarlo y liberar los recursos asociados con él mediante la instrucción CLOSE:

    CLOSE customer_cursor;
    

    Y finalmente, debes eliminar el cursor mediante la instrucción DEALLOCATE:

    DEALLOCATE customer_cursor;

    este ultimo paso es importante pues ayuda a liberar la memoria de servidor, de estamanera creamos un cursor de sql server usando una base de prueba como es la de Northwind que puedes descargar aqui.

    Los cursores en sql server se definen para una consulta debemos evitar el uso del mismo debido al excesivo uso de memoria que tienen los mismos.

    comentanos tu experiencia en cursores!

    Hasta la Proxima gracias :D!!