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:
Brillante!!!!