Las capas de la API de acceso a datos como ODBC, OLE-DB y SqlClient llaman al procedimiento almacenado (interno) sp_reset_connection cuando se reutiliza una conexión de un grupo de conexiones. Hace esto para restablecer el estado de la conexión antes de que se reutilice.
No parece haber documentación oficial sobre qué cosas se restablecen, pero aquí hay una lista no oficial.
sp_reset_connection restablece los siguientes aspectos de una conexión:
- Restablece todos los estados y números de error (como @@error)
- Detiene todos los EC (contextos de ejecución) que son subprocesos secundarios de un EC aparente que ejecuta una consulta paralela
- Esperará por cualquier operación de E/S pendiente que esté pendiente
- Liberará cualquier búfer retenido en el servidor por la conexión
- Desbloqueará cualquier recurso de búfer que utilice la conexión
- Liberará toda la memoria asignada propiedad de la conexión
- Borrará cualquier trabajo o tablas temporales creadas por la conexión
- Matará todos los cursores globales propiedad de la conexión
- Cerrará cualquier identificador SQL-XML abierto que esté abierto
- Eliminará cualquier tabla de trabajo abierta relacionada con SQL-XML
- Cerrará todas las tablas del sistema
- Cerrará todas las tablas de usuarios
- Dejará caer todos los objetos temporales
- Anulará las transacciones abiertas
- Abandonará una transacción distribuida cuando se inscriba
- Disminuirá el recuento de referencias para los usuarios en la base de datos actual, lo que liberará el bloqueo de la base de datos compartida
- Liberará bloqueos adquiridos
- Liberará cualquier identificador que pueda haber sido adquirido
- Restablecerá todas las opciones SET a los valores predeterminados
- Restablecerá el valor de @@rowcount
- Restablecerá el valor de @@identity
- Restablecerá cualquier opción de rastreo a nivel de sesión usando dbcc traceon()
sp_reset_connection NO se restablecerá:
- Contexto de seguridad, por lo que la agrupación de conexiones coincide con las conexiones en función de la cadena de conexión exacta
- Si ingresó un rol de aplicación usando sp_setapprole, ya que los roles de aplicación no se pueden revertir
- El nivel de aislamiento de la transacción