在SQL Server中,@表,#表和##表之间有什么区别?
在SQL Server中,@表,#表和##表之间有什么区别?
Answers:
#table
引用本地(仅对创建它的用户可见)临时表。
##table
引用全局(对所有用户可见)临时表。
@variableName
是指可以根据其类型保存值的变量。
#
和 ##
表是在临时数据库中表示实际表。这些表可以具有索引和统计信息,并且可以在会话中的所有存储过程中进行访问(对于全局临时表,它可以在会话中使用)。
@table是一个表变量。
我将重点介绍#table和@table之间的区别。## table是一个全局临时表,对于使用SQL Server十多年来的记录,我还没有遇到有效的用例。我敢肯定有些东西存在,但是对象的性质使它高度不能使用恕我直言。
@marc_s对@whiner的响应是绝对正确的:普遍的说法是表变量始终存在于内存中。表变量进入磁盘并像临时表一样操作实际上是很常见的。
无论如何,我建议通过遵循@Astander指出的链接来阅读差异集。大部分差异涉及对@table变量无法执行的操作的限制。
CREATE TABLE #t
创建一个仅在该连接上可见的表,并且在该连接期间,创建另一个连接的同一用户将无法从另一个连接中看到表#t。
CREATE TABLE ##t
创建一个对其他连接可见的临时表。但是,当创建连接结束时,该表将被删除。
SqlConnection.Open()
具有相同连接字符串的连接 是否相同?