#temptable和## TempTable之间的区别?


Answers:


33

#table引用本地临时表-仅对创建它的用户可见

##table引用全局临时表-对所有用户可见


23

#TempTables不仅限于用户或连接本地。它们对于创建它们的过程以及创建过程产生的任何过程都是本地的。例如,如果我有以下内容:

Declare @strDynamicSQL as varchar(8000)

Set @strDynamicSQL = 'Select GetDate() As TheDate Into #TheDateTable'
Execute(@strDynamicSQL)

Select *
From #TheDateTable

我收到以下错误:

消息208,级别16,状态0,第7行无效的对象名称“ #TheDateTable”。

但是,如果我这样做:

Declare @strDynamicSQL as varchar(8000)

Create Table #TheDateTable (
    TheDate     DateTime
)

Set @strDynamicSQL = 'Insert Into #TheDateTable Select GetDate() As TheDate'
Execute(@strDynamicSQL)

Select *
From #TheDateTable

我没有错误。

在第一个示例中,该Execute语句在生成的过程中发生。由于表是在该进程中创建的,因此在返回时该进程将消失。在此过程中,表是“再见”。

在第二个示例中,该表是由顶级过程创建的。然后在生成的过程中与之交互。该表可用于创建它的进程及其产生的任何进程。

##tables打破这个。##创建表的过程将是控制过程。如果该进程仍然存在,即使没有针对该进程的任务,也不会将该表标记为要删除。一旦##创建表的进程消失了,则对该表执行最后一个任务时,该表将被标记为要删除。

这是一种简单的查看方法。 #表仅在其创建过程的范围内 ##可用。除其他存在与创建表的过程一同存在外,其他任何表都可用。


10

与第一次创建或引用表时,在与SQL Server实例相同的连接期间,本地临时表仅对其创建者可见。用户从SQL Server实例断开连接后,将删除本地临时表。全局临时表对任何用户和创建后的任何连接都是可见的,并且当所有引用该表的用户与SQL Server实例断开连接时,全局临时表将被删除。

从这里取

更多关于这个


4

简单的测试方法 #localtable and ##globaltable

在其他SQL查询窗口中尝试

create table ##globaltemptable (id int )
go
insert into ##globaltemptable values (1)
go
select * from ##globaltemptable

在其他SQL查询窗口中尝试

create table #localtemptable (id int )
go
insert into #localtemptable values (1)
go
select * from #localtemptable

现在,如果您以全局窗口语法运行表:#localtemptable的选择查询,则会收到如下错误:-

Invalid object name '#localtemptable'.

在同一会话的任何查询窗口中运行表:## globaltemptable的选择查询时,您将获得返回查询结果的信息。


0

该表将一直可见/可用,直到创建它的进程/连接结束,并且仅到创建它的会话为止。

该表是全局表,在创建该表的进程/会话结束之前,所有人均可使用。


0

“#”表示本地临时表

  • 它以单个哈希值“#”作为表名的前缀开始。

  • 本地临时表仅适用于
    创建它的连接。每个本地临时表在表名的末尾都有一个随机值。

  • 当关闭现有连接时,本地临时表将自动删除,或者用户可以使用以下命令“ drop table #TempTable”显式删除它。

  • 如果在存储过程中创建了临时表,则在存储过程执行完成时会自动将其删除。

  • 您可以创建具有相同名称但在不同连接中的本地临时表,并将其与相同的名称以及各种随机值一起存储。

“ ##”表示全局临时表

  • 它以单个哈希值“ ##”作为表名的前缀开始,并且其名称始终是唯一的。
  • 名称后没有随机数。全局临时表对SQL Server的所有连接都是可见的。
  • 仅当关闭引用该表的最后一个连接(在其中创建了全局临时表)时,全局临时表才被销毁。
  • 您可以从SQL Server的所有连接访问全局临时表,直到打开引用连接为止。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.