En SQL Server, ¿cuál es la diferencia entre una tabla @, una tabla # y una tabla ##?Tablas de SQL Server: ¿cuál es la diferencia entre @, # y ##?
Respuesta
#table
hace referencia a una tabla temporal local (visible solo para el usuario que la creó).
##table
se refiere a una tabla temporal global (visible para todos los usuarios).
@variableName
se refiere a una variable que puede contener valores según su tipo.
aplausos
#
y ##
tablas son tablas reales representados en la base de datos temporal. Estas tablas pueden tener índices y estadísticas, y se puede acceder a través de sprocs en una sesión (en el caso de una tabla temporal global, está disponible para todas las sesiones).
El @table es una variable de tabla.
Y la variable de la tabla también vivirá en la base de datos tempDB, si su tamaño es demasiado grande para mantenerla en la memoria. –
¿No está seguro de por qué su respuesta fue rechazada, gimiente? Pensé que contenía información útil, especialmente sobre la base de datos temporal ... –
Quizás porque el artículo contiene un error, que se señala en la sección de comentarios de ese artículo. – Alex
Tenga una mirada en
Me doy cuenta de esto hace mucho tiempo, pero dado que esta es una respuesta solo de enlace (y el primer enlace está muerto), ¿podría actualizarse con las conclusiones principales de cada uno de los enlaces? –
me centraría en las diferencias entre #table y @table. ## table es una tabla temporal global y para el registro en más de 10 años de uso de SQL Server todavía tengo que encontrar un caso de uso válido. Estoy seguro de que algunos existen, 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 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 en lo que no se puede hacer con las variables @table.
Tengo 5 procedimientos almacenados separados que realizan diferentes partes de un cálculo y generan un solo resultado. Para la auditoría, quiero ver valores intermedios y también lo hace el auditor. Ajusté mis procedimientos para descargar algunos en una tabla ## Temp para que ambos podamos verlos, pero no se conservan (solo son necesarios durante las auditorías). Hay un caso de uso válido para usted (en mi humilde opinión). – RyanfaeScotland
@Ryan ¿por qué ## Table es válida cuando podría haber usado dbo.Table? No considero que sea un caso de uso válido cuando todo lo que ha hecho se salvó de escribir una declaración DROP. –
No quiero otorgarle al auditor permisos DROP en mi base de datos. Tampoco quiero tener que regresar y ordenar después de que haya terminado. Con una tabla temporal, puede ejecutar la consulta tantas veces como quiera y sé que cuando termine no dejará una huella en la base de datos. – RyanfaeScotland
CREATE TABLE #t
crea una tabla que sólo es visible y durante esa conexión el mismo usuario que crea otra conexión no será capaz de ver #t tabla a partir de la otra conexión.
CREATE TABLE ##t
Crea una tabla temporal visible para otras conexiones. Pero la tabla se elimina cuando la conexión de creación finaliza.
si necesita una tabla temporal global única, crear su propia Uniqueidentifier con un prefijo/sufijo y soltar la ejecución posterior si un if object_id (.... El único inconveniente es que utiliza SQL dinámico y la necesidad de colocar de forma explícita.
- 1. ¿Cuál es la diferencia entre SQL Server Compact Edition y SQL Server Express Edition?
- 2. ¿Cuál es la diferencia entre ";" y "IR" en T-SQL?
- 3. ¿Cuál es la diferencia entre SQL Azure y SQL Server 2008?
- 4. ¿Cuál es la diferencia entre el inicio de sesión y la credencial en SQL Server 2008?
- 5. ¿Cuál es la diferencia entre la reconstrucción del índice OFFLINE y ONLINE en SQL Server?
- 6. ¿Cuál es la diferencia entre SQL Server Management Studio y la edición Express?
- 7. ¿Cuál es la diferencia entre "LIKE" y "=" en SQL?
- 8. ¿Cuál es la diferencia entre SQLite y SQL
- 9. Diferencia entre SQL Server y Oracle 'Usuario'
- 10. Diferencia entre SQL JOIN y consulta de dos tablas
- 11. ¿Cuál es la diferencia entre drop table y delete table en SQL Server?
- 12. ¿Cuál es la diferencia entre Shrink y Compact en SQL Server CE?
- 13. ¿Cuál es la diferencia entre; y GO en procedimiento almacenado en SQL Server?
- 14. ¿Cuál es la diferencia entre tran y transacción en SQL Server 2005
- 15. ¿Cuál es la diferencia entre char, nchar, varchar y nvarchar en SQL Server?
- 16. SQL Server: ¿Cuál es la diferencia entre Index Rebuilding y Index Reorganizing?
- 17. ¿Cuál es la diferencia entre datetime y timestamp?
- 18. ¿Cuál es la diferencia entre dict() y {}?
- 19. Cuál es la diferencia entre = y: =
- 20. ¿Cuál es la diferencia entre [indefinido] y [,]?
- 21. ¿Cuál es la diferencia entre "$^N" y "$ +"?
- 22. ¿cuál es la diferencia entre:.! y: r !?
- 23. ¿Cuál es la diferencia entre ".equals" y "=="?
- 24. ¿Cuál es la diferencia entre {0} y ""?
- 25. ¿Cuál es la diferencia entre .ToString (+) y ""
- 26. Cuál es la diferencia entre $ (...) y `...`
- 27. ¿Cuál es la diferencia entre `##` y `hashCode`?
- 28. ¿Cuál es la diferencia entre + = y = +?
- 29. ¿Cuál es la diferencia entre " " y ""?
- 30. Cuál es la diferencia entre $ y jQuery
Su definición de #table no es totalmente correcta. No se limita al usuario sino a la conexión. Si un usuario tiene múltiples conexiones, solo estará visible para la conexión que creó el #table en primer lugar. –
@DavinStuder ha ofrecido una aclaración crucial. La distinción entre una tabla visible para el usuario vs.una tabla visible solo en la conexión actual es muy importante. – mirzmaster