sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cuál es el alcance de CONTEXT_INFO en SQL Server?

La información de contexto no tiene alcance (en el sentido del alcance de las variables de idioma) y está vinculada a la duración de la sesión. Una vez establecida, la información de contexto permanece en el valor establecido hasta que se cierra la conexión (termina la sesión) o hasta que se establece un nuevo valor. Dado que la ejecución en una sesión es siempre secuencial, no hay cuestión de concurrencia.

SI establece la información de contexto en un procedimiento, cualquier disparador que se ejecute posteriormente en esa sesión verá el valor de información de contexto recién establecido. Establecer el valor de ID de usuario en la información de contexto, como usted propone, y usarlo en disparadores es el ejemplo típico del uso de la información de contexto y es perfectamente seguro con respecto a la concurrencia, ya que básicamente no hay concurrencia de la que hablar. Si planea establecer la información de contexto en un procedimiento almacenado y luego confiar en ella en un activador que se ejecuta debido a las eliminaciones que ocurren en dicho procedimiento, entonces su lote aún no finalizó, de acuerdo con el artículo que vinculó, recupera la información de conetxt de sys.dm_exec_requests DMV o desde el CONTEXT_INFO() función. Todavía no se insertará en sys.dm_exec_sessions , eso solo puede suceder después de salir del procedimiento almacenado y finalizar cualquier otra llamada en el lote de T-SQL enviado al servidor (la 'solicitud').