¿Es necesario usar # para crear tablas temporales en el servidor SQL?

91

¿Es necesario usarlo #antes de crear una tabla temporal en el servidor SQL?

Ejemplo:

SELECT column1, column2, someInt, someVarChar 
INTO ItemBack1 
FROM table2
WHERE table2.ID = 7

Para ItemBack1, ¿es necesario utilizar el #símbolo?

Si no es así, ¿de qué sirve #para crear tablas temporales?

Arun CM
fuente
3
Si. # crea una tabla temporal. Sin ella crea una mesa.
Jeow Li Huan

Respuestas:

151

Si. Debe anteponer el nombre de la tabla con "#" (hash) para crear tablas temporales.

Si NO necesita la tabla más adelante, continúe y créela. Las tablas temporales se parecen mucho a las tablas normales. Sin embargo, se crea en tempdb. Además, solo es accesible a través de la sesión actual, es decir, para EG: si otro usuario intenta acceder a la tabla temporal creada por usted, no podrá hacerlo.

"##" (el doble hash crea una tabla temporal "Global" a la que también pueden acceder otras sesiones.

Consulte el enlace a continuación para conocer los conceptos básicos de las tablas temporales: http://www.codeproject.com/Articles/42553/Quick-Overview-Temporary-Tables-in-SQL-Server-2005

Si el contenido de su tabla es menor a 5000 filas y NO contiene tipos de datos como nvarchar (MAX), varbinary (MAX), considere usar Variables de tabla.

Son las más rápidas, ya que son como cualquier otra variable almacenada en la RAM. También se almacenan en tempdb, no en RAM .

DECLARE @ItemBack1 TABLE
(
 column1 int,
 column2 int,
 someInt int,
 someVarChar nvarchar(50)
);

INSERT INTO @ItemBack1
SELECT column1, 
       column2, 
       someInt, 
       someVarChar 
  FROM table2
 WHERE table2.ID = 7;

Más información sobre las variables de la tabla: http://odetocode.com/articles/365.aspx

daemon móvil
fuente
11
En SQL Server, la sintaxis SELECT es INSERT INTO @ ItemBack1 SELECT column1, column2, someInt, someVarChar FROM table2 WHERE table2.ID = 7
mhenry1384
8
Las tablas de variables no se almacenan en RAM, también se almacenan en tempdb. Recomendaría no usar variables de tabla a menos que comprenda algunas de sus desventajas, ya que sus recuentos de filas se establecen automáticamente en uno y pueden producirse malos planes.
ConstantineK
¿Puede dar una fuente para las restricciones de 5000 filas, nvarchar (max), varbinary (max)? Esto está permitido, pero no estoy seguro de por qué no se recomienda.
Brad
1
Yo también pensé que las variables de la tabla se almacenaban en la memoria. Estoy corregido: dba.stackexchange.com/a/16386/23720
Baodad
1
Solo voy a comentar también que es un hecho que las variables de la tabla se almacenan en tempdb. Estoy comentando, así que tal vez MÁS personas lean los comentarios y lo entiendan, ya que estoy tan cansado de entrar en un porro como consultor senior para tener que discutir con un empleado de tiempo completo que es ignorante y trata de decir lo contrario. Estoy hablando de docenas de compañías en Fortune 500, me alegro de ver a la gente comentar. Lamentablemente, a menos que este OP que responde a la pregunta EDITAR realmente su respuesta, seguiremos teniendo este ignorante persistiendo durante una década más o menos.
Tom Stickel
14

La diferencia entre estas dos tablas ItemBack1y #ItemBack1es que la primera es persistente (permanente) mientras que la otra es temporal.

Ahora, si vuelve a mirar su pregunta

¿Es necesario usar # para crear una tabla temporal en el servidor SQL?

La respuesta es , porque sin esto precedente #la tabla no será una tabla temporal, será independiente de todas las sesiones y alcances.

zzlalani
fuente