En SQL Server, ¿cuál es la diferencia entre una tabla @, una tabla # y una tabla ##?
sql-server
Craig Schwarze
fuente
fuente
Mira esto
fuente
#
y las##
tablas son tablas reales representadas en la base de datos temporal. Estas tablas pueden tener índices y estadísticas, y se puede acceder a ellas a través de sprocs en una sesión (en el caso de una tabla temporal global, está disponible en todas las sesiones).@Table es una variable de tabla.
Para más: http://www.sqlteam.com/article/temporary-tables
fuente
Me centraría en las diferencias entre #table y @table. ## table es una tabla temporal global y, para que conste en más de 10 años de uso de SQL Server, todavía no he encontrado un caso de uso válido. Estoy seguro de que existen algunos, pero la naturaleza del objeto lo hace altamente inutilizable en mi humilde opinión.
La respuesta a @whiner por @marc_s es absolutamente cierta: es un mito prevaleciente que las variables de la tabla siempre viven en la memoria. En realidad, es bastante común que una variable de tabla vaya al disco y funcione como una tabla temporal.
De todos modos, sugiero leer sobre el conjunto de diferencias siguiendo los enlaces señalados por @Astander. La mayor parte de la diferencia implica limitaciones sobre lo que no puede hacer con las variables @table.
fuente
CREATE TABLE #t
Crea una tabla que solo es visible en y durante esa CONEXIÓN, el mismo usuario que crea otra conexión no podrá ver la tabla #t de la otra conexión.
CREATE TABLE ##t
Crea una tabla temporal visible para otras conexiones. Pero la tabla se descarta cuando finaliza la conexión de creación.
fuente
SqlConnection.Open()
con la misma cadena de conexión es la misma CONEXIÓN ?si necesita una tabla temporal global única, cree la suya propia con un prefijo / sufijo de identificador único y elimine la ejecución de la publicación si un if object_id (.... El único inconveniente es usar SQL dinámico y debe eliminarlo explícitamente.
fuente