2009-08-07 12 views

Respuesta

17

#temp ámbito de sesión se
##temp es ámbito de servidor

MSDN:

tablas temporales locales son visibles solo en la sesión actual, y las tablas temporales globales son visibles para todas las sesiones

...

Una tabla temporal local creada en un procedimiento almacenado se cae automáticamente cuando se termina la procedimiento almacenado. Puede hacer referencia a la tabla mediante cualquier procedimiento almacenado anidado ejecutado por el procedimiento almacenado que creó la tabla. La tabla no se puede hacer referencia en el proceso que llamó al procedimiento almacenado que creó la tabla.

Todas las demás tablas temporales locales son caídas automáticamente al final de la sesión actual.

tablas temporales globales se eliminan automáticamente cuando la sesión que creó la tabla termina y todas las demás tareas han dejado de referencia ellos. La asociación entre una tarea y una tabla se mantiene solo para la vida de una única instrucción Transact-SQL . Esto significa que una tabla temporal global se descarta al completar la última instrucción Transact-SQL que estaba activamente haciendo referencia a la tabla cuando finalizó la sesión de creación .

+0

tablas temporales "@" funcionan de manera similar a "#" tablas temporales, pero no pueden ser referenciadas fuera del procedimiento o lote en el que están definidas. –

+0

Gracias por la aclaración. ¡Eso es exactamente lo que necesitaba! –

0

createing un #temptable es de ámbito local, pero pueden ser compartidos dentro de los llamados procedimientos almacenados anidados

0

Depende de lo que usted diga por "temp table." Si se refiere a tablas con el prefijo #, su nombre real contendría la ID de conexión y es único por conexión. Sin embargo, si está creando manualmente una tabla en la base de datos tempdb, se tratará como todas las tablas normales.

2

Las tablas temporales locales se pueden crear usando el signo hash (#) antes del nombre de la tabla. Solo son visibles en la conexión actual. Cuando se corta la conexión, su alcance también termina. Es posible crear y usar tablas temporales locales con el mismo nombre simultáneamente en dos conexiones diferentes. Con el fin de permitir que este comportamiento de SQL Server sufijos de nombre de la tabla temporal local con el dígito hexadecimal incrementales, que se restablece cuando los servicios de SQL se reinician

ver http://blog.sqlauthority.com/2009/03/29/sql-server-fix-error-msg-2714-level-16-state-6-there-is-already-an-object-named-temp-in-the-database/

Cuestiones relacionadas