【发布时间】:2010-02-08 05:13:24
【问题描述】:
在SQL Server中,@表、#表和##表有什么区别?
【问题讨论】:
标签: sql-server
在SQL Server中,@表、#表和##表有什么区别?
【问题讨论】:
标签: sql-server
#table 指的是本地(仅对创建它的用户可见)临时表。
##table 指的是全局(对所有用户可见)临时表。
@variableName 指的是可以根据其类型保存值的变量。
【讨论】:
【讨论】:
# 和## 表是临时数据库中表示的实际表。这些表可以有索引和统计信息,并且可以在会话中跨 sproc 访问(在全局临时表的情况下,它可以跨会话使用)。
@table 是一个表变量。
【讨论】:
我会关注#table 和@table 之间的区别。 ##table 是一个全局临时表,对于使用 SQL Server 10 多年的记录,我还没有遇到过有效的用例。我确信有些存在,但该对象的性质使其非常无法使用恕我直言。
@marc_s 对@whiner 的回应是绝对正确的:表变量总是存在于内存中是一个流行的神话。实际上,表变量进入磁盘并像临时表一样操作是很常见的。
无论如何,我建议通过@Astander 指出的链接阅读这些差异。大多数差异都涉及到对 @table 变量不能做的事情的限制。
【讨论】:
CREATE TABLE #t
创建一个表,该表仅在该 CONNECTION 时和该 CONNECTION 期间可见 创建另一个连接的同一用户将无法从另一个连接中看到表 #t。
CREATE TABLE ##t
创建一个对其他连接可见的临时表。但是当创建连接结束时,表会被删除。
【讨论】:
SqlConnection.Open() with the same connection string is The same CONNECTION ?
如果您需要一个唯一的全局临时表,请使用唯一标识符前缀/后缀创建自己的临时表,如果 if object_id(.... 唯一的缺点是使用动态 sql,需要显式删除。
【讨论】: