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

Anuncios