SQL Server表:@,#和##有什么区别?

时间:2010-02-08 05:13:25

标签: sql-server

在SQL Server中,@ table,#table和## table之间有什么区别?

6 个答案:

答案 0 :(得分:105)

#table指的是本地(仅对创建它的用户可见)临时表。

##table指的是全局(对所有用户都可见)临时表。

@variableName指的是一个可以根据其类型保存值的变量。

欢呼声

答案 1 :(得分:25)

答案 2 :(得分:7)

###表是临时数据库中表示的实际表。这些表可以具有索引和统计信息,并且可以在会话中跨越sprocs访问(在全局临时表的情况下,它可以跨会话使用)。

@table是一个表变量。

更多信息:http://www.sqlteam.com/article/temporary-tables

答案 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并且需要显式删除,则删除后执行。

相关问题