SQL Server多用户中的临时表是否安全?

时间:2009-08-07 21:49:58

标签: sql-server

线程本地的临时表还是服务器的全局临时表?

4 个答案:

答案 0 :(得分:20)

#temp是会话范围
 ##temp是服务器范围

MSDN:

  

可以看到本地临时表   只在当前会话中,和   全局临时表可见   所有会议

...

  

在a中创建的本地临时表   存储过程被删除   存储时自动   程序结束了。表可以   被任何嵌套存储引用   存储过程执行的程序   创建表的过程。该   表不能被引用   调用存储的进程   创建表的过程。

     

所有其他本地临时表都是   在结束时自动掉线   本届会议。

     

全球临时表是   会话时自动删除   创建表结束和所有   其他任务已停止引用   他们。任务之间的关联   并且仅为表维护表   单个Transact-SQL的生命周期   声明。这意味着全球化   临时表被丢弃了   完成最后一个Transact-SQL   积极的声明   在引用表时   创建会话结束。

答案 1 :(得分:2)

  

可以使用表名之前的哈希(#)符号创建本地临时表。它们仅在当前连接中可见。当连接断开时,其范围也结束。可以在两个不同的连接中同时创建和使用具有相同名称的本地临时表。为了允许这种行为,SQL Server将本地临时表的名称后缀为增量十六进制数字,在重新启动SQL服务时将其重置

请参阅http://blog.sqlauthority.com/2009/03/29/sql-server-fix-error-msg-2714-level-16-state-6-there-is-already-an-object-named-temp-in-the-database/

答案 2 :(得分:0)

创建#tempTable在范围内是本地的,但可以在嵌套的调用存储过程中共享

答案 3 :(得分:0)

取决于“临时表”的含义。如果您指的是带有#前缀的表,则其实名将包含连接ID,并且每个连接都是唯一的。但是,如果您在tempdb数据库中手动创建表,它将被视为所有普通表。