2010-10-10 14 views
5

¿Qué sucederá si se produce un error durante:T-sql Cursor, ¿qué pasará en caso de error?

  1. declarar un cursor
  2. datos Captación

¿Qué sucederá si se produce el error antes de que se cierra el cursor? ¿Se cierra automáticamente?

Cuando uso un cursor, ¿cuál es la mejor práctica para manejar los errores?

Respuesta

1

Cuando se produce un error después de declarar que el cursor y el lote terminan, el cursor permanecerá abierto. El cursor se cerrará después de que se cierre la conexión.

Si puede capturar el error, es una buena práctica cerrar el cursor como parte del manejo de errores.

2

Actualización con una solución mejor

La función [CURSOR_STATUS][1] se puede utilizar para comprobar el estado de un cursor.

En SQL 2005 y versiones posteriores, esto se puede envolver en un bloque TRY...CATCH.
Algo así como

BEGIN TRY 

    DECLARE <cursorName>... CURSOR FOR 
    ...cursor statement, fetch block, close & deallocate 

END TRY 
BEGIN CATCH 

    IF (CURSOR_STATUS('global', '<cursorName>') > -2) 
    DEALLOCATE dbCursor 

    ...other error handling 

END CATCH 
+1

Cuando el cursor no se cierran cuando no hay ningún error? –

+0

Actualizado con una mejor solución; también intentó aclarar el ejemplo –

+0

¿Por qué> -2? Creo que desea cerrarlo si el estado es> = 0. – Trevor

Cuestiones relacionadas