Tengo una pregunta sobre una pieza de documentación sobre tablas temporales que leí recientemente en TechNet . El cuarto párrafo de la sección de Tablas temporales en esa página dice lo siguiente:
Si se crea una tabla temporal con una restricción con nombre y la tabla temporal se crea dentro del alcance de una transacción definida por el usuario, solo un usuario a la vez puede ejecutar la instrucción que crea la tabla temporal. Por ejemplo, si un procedimiento almacenado crea una tabla temporal con una restricción de clave primaria nombrada, el procedimiento almacenado no puede ser ejecutado simultáneamente por múltiples usuarios.
Trabajo en un entorno donde hacemos un uso significativo de un puñado de procedimientos almacenados que usan tablas temporales indexadas, y nunca hemos encontrado un problema en el que los usuarios tengan que esperar a que se complete una ejecución antes de que comience la siguiente. Espero que siga siendo así, pero me preocupa que pueda convertirse en un problema si esta advertencia no se entiende correctamente.
Específicamente, no estoy claro sobre los siguientes puntos:
- ¿Esto se aplica solo a las tablas temporales globales, o también a las locales? Parece extraño que una tabla que no sea visible fuera de la sesión (como en el último caso) impida que otra sesión se ejecute simultáneamente.
- ¿Qué califica como una "restricción con nombre"? ¿No todas las restricciones tienen nombres (incluso si son generados por el sistema)? ¿Se refiere esto a restricciones con un alias definido por el usuario? Esto me parece una frase pobre.
- ¿"Usuarios múltiples" en realidad significa sesiones múltiples? Estos procedimientos se llaman a través de nuestra aplicación utilizando una sola cuenta de servicio, por lo que el 99.9% de las llamadas a nuestros scripts se realizan a la base de datos por esa cuenta única (y no me preocupa la llamada ocasional que un administrador puede hacer en el back-end). Si la cuenta de servicio puede ejecutar el sproc en varias sesiones simultáneamente, entonces este problema es discutible para mis propósitos.