Minitip: Crear y recorrer un cursor (SQL Server)

Supongamos que tienes que borrar una serie de registros de una tabla, en una base de datos SQL Server. Pero no en plan “borra los campos con tal valor nulo” o “con id entre tal y tal valor”, no. Unos registros que cumplan una condición compleja, que la select para sacarlos tenga que tener alias, joins, y ofrendas a Satán.
Pues la cosa es tan sencilla como escribir un procedimiento con sus variables y sus punterillos. Es muy similar a un programita en java, y desde luego si tenéis nociones de programación imperativa vais a comprender el codigo sin necesidad de más explicación. Como siempre, es una cuestión de cambiar los nombres de las palabras clave y las llamadas al API, pero en la base todo es lo mismo:

DECLARE @variable1 Tipo1;
DECLARE @variable2 Tipo2;


DECLARE nombre_cursor CURSOR FOR
select variable1, variable2 from joins_muy_chungas where condiciones_muy_chungas
	
OPEN nombre_cursor
FETCH nombre_cursor INTO @variable1, @variable2;

WHILE (@@FETCH_STATUS = 0)
    BEGIN
	DELETE FROM Tabla WHERE variable1 = @variable1 AND variable2=@variable2;
	FETCH nombre_cursor INTO @variable1, @variable2;
    END

CLOSE nombre_cursor
DEALLOCATE nombre_cursor	

Claro está, el número de variables y lo que se haga entre el BEGIN y el END depende de lo que se pretenda hacer en cada momento. Pero es muy útil tener a mano un ejemplo para poder editar a partir de ahí, aunque solo sea por no tener que andar buscando en google cada vez que quieras hacer algo por el estilo.

No voy a explicar el código porque es bastante autoexplicativo: Declara el cursor, rellenas el cursor, abres el cursor, recorres el cursor, cierras el cursor, liberas la memoria del cursor.

Como siempre, espero que la entrada pueda resultarle útil a alguien. Y si no, para compensar, aquí tenéis un gato:

tumblr_m0jfy81TTT1qb6t6wo1_500

One thought on “Minitip: Crear y recorrer un cursor (SQL Server)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.