Damoin Web Services

Blog de Social Media y Desarrollo Web

FETCH API_CURSOR y bloqueos en IIS

Recientemente hemos sufrido un problema en un servidor IIS 6 , por el cual se bloqueaba la pagina web y un proceso de SQL Server 2005 aparecia con un comando en espera “FETCH API_CURSOR”.

Inicialmente achacabamos el problema al propio servidor SQL Server y hemos intentado dilucidar sin éxito el causante del problema, hemos revisado Procedimientos, Funciones, tiempos de espera, etc, sin conseguir ningun resultado aparente.

Si te interesa, sigue leyendo…

Bucles while en SQL Server

Para hacer un bucle while en SQL Server usaremos un cursor y la orden FETCH

En este ejemplo vamos a sacar un select html desde la tabla de provincias y lo devolvemos

DECLARE @resp varchar(2000)
DECLARE @provincia varchar(50)
DECLARE @CP_PROVINCIA INT

El cursor lo declaramos y le asignamos la consulta de la cual queremos recorrer los registros o valores

DECLARE @cursor cursor
SET @cursor = CURSOR FOR
SELECT nombre_provincia, CP_PROVINCIA
FROM provincias

Abrimos el cursor y con la orden fetch seleccionamos el primer registro para el bucle,
por cada campo de la consulta que queramos usar en el bucle debemos declarar una variable (los hemos señalado en naranja)

OPEN @cursor – Abre cursor
FETCH NEXT FROM @cursor – Primera fila
INTO @provincia , @CP_PROVINCIA
SELECT @resp = ”

Mientras haya registros en el cursor

WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @resp = @resp + ‘<option value=’ + cast(@CP_PROVINCIA as varchar(50)) + ‘ >’ + @provincia  + ‘</option>’

Para evaluar el siguiente registro volvemos al fecth

FETCH NEXT FROM @cursor INTO @provincia , @CP_PROVINCIA
END
RETURN @resp

Podemos devolver el valor (si es una funcion) , en el caso de un procedimiento dentro del BEGIN podriamos haber realizado cualquier operacion (INSERT, UPDATE, DELETE, SP_ , ETC)

Si necesitas un experto en bases de datos [click aquí]