parent nodes: SQLapuntes
Cursores SQL
Declarar
Declarar la variable cursor (sin arroba) para una consulta y tantas variables como columnas de la consulta SELECTDECLARE CURSOR_NOTARIOS CURSOR FOR
SELECT ID_NOTARIO, ID_NOTARIAS_ACTUAL
FROM NOTARIOS
WHERE PERTENECE = 1 AND ID_NOTARIAS_ACTUAL >1 AND ID_NOTARIAS_ACTUAL < 10
ORDER BY ID_NOTARIO
DECLARE @ID_NOTARIO INT
DECLARE @ID_NOTARIA INT
Abrir y almacenar
Abrir el cursor y almacenar el primer registro del resultado en variablesOPEN CURSOR_NOTARIOS
FETCH NEXT FROM CURSOR_NOTARIOS
INTO @ID_NOTARIO, @ID_NOTARIA
Si ha habido error las variables estarán vacías
Bucle
En caso de no poder pasar al siguiente registro (o al primero) se pondrá a cero la variable @@FETCH_STATUS, esto sirve de condición de salida para el bucle del cursor
Al final de cada iteración hay que volver a hacer Fetch del cursor en las variables para pasar al siguiente registro del resultado de la consulta WHILE @@FETCH_STATUS = 0
BEGIN
-- (···)
FETCH NEXT FROM CURSOR_NOTARIOS
INTO @ID_NOTARIO, @ID_NOTARIA
END
Cerrar y liberar
Al final hay que cerrar el cursor y liberar la memoria que ha usado.CLOSE CURSOR_NOTARIOS
DEALLOCATE CURSOR_NOTARIOS
El script completo
DECLARE CURSOR_NOTARIOS CURSOR FOR
SELECT ID_NOTARIO, ID_NOTARIAS_ACTUAL
FROM NOTARIOS
WHERE PERTENECE = 1 AND ID_NOTARIAS_ACTUAL >1 AND ID_NOTARIAS_ACTUAL < 10
ORDER BY ID_NOTARIO
DECLARE @ID_NOTARIO INT
DECLARE @ID_NOTARIA INT
OPEN CURSOR_NOTARIOS
FETCH NEXT FROM CURSOR_NOTARIOS
INTO @ID_NOTARIO, @ID_NOTARIA
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'HOLA ' + CAST( @ID_NOTARIO AS VARCHAR ) + ' '
FETCH NEXT FROM CURSOR_NOTARIOS
INTO @ID_NOTARIO, @ID_NOTARIA
END
CLOSE CURSOR_NOTARIOS
DEALLOCATE CURSOR_NOTARIOS