在SQL Server中,@ table,#table和## table之间有什么区别?
答案 0 :(得分:105)
#table
指的是本地(仅对创建它的用户可见)临时表。
##table
指的是全局(对所有用户都可见)临时表。
@variableName
指的是一个可以根据其类型保存值的变量。
欢呼声
答案 1 :(得分:25)
看看
答案 2 :(得分:7)
#
和##
表是临时数据库中表示的实际表。这些表可以具有索引和统计信息,并且可以在会话中跨越sprocs访问(在全局临时表的情况下,它可以跨会话使用)。
@table是一个表变量。
答案 3 :(得分:6)
我会关注#table和@table之间的区别。 ## table是一个全局临时表,对于使用SQL Server超过10年的记录,我还没有遇到过有效的用例。我确信有些存在,但是对象的性质使得它非常难以使用恕我直言。
@marc_s对@whiner的回应绝对正确:表变量总是存在于内存中是一种流行的神话。实际上,表变量转到磁盘并像临时表一样运行是很常见的。
无论如何,我建议按照@Astander指出的链接阅读这些差异。大多数差异都涉及对@table变量不能做的限制。
答案 4 :(得分:4)
CREATE TABLE #t
创建一个仅在CONNECTION上和期间可见的表 创建另一个连接的同一用户将无法从另一个连接中看到表#t。
CREATE TABLE ##t
创建对其他连接可见的临时表。但是,当创建连接结束时,表将被删除。
答案 5 :(得分:0)
如果你需要一个唯一的全局临时表,使用Uniqueidentifier Prefix / Suffix创建你自己的表,如果if object_id(....唯一的缺点是使用Dynamic sql并且需要显式删除,则删除后执行。