2009-08-07 24 views

回答

17

#temp内被共享会话范围
##temp是服务器范围

MSDN:

本地临时表仅在当前会话中可见 ,并且 全局临时表对于可见个所有会话

...

当存储 过程完成在 存储过程中创建的本地临时表被自动丢弃 。该表可以通过由创建表的存储的 过程执行的任何嵌套存储的 程序来引用。 表不能被称为存储的 过程的 过程引用。

所有其他本地临时表都是 在当前会话结束时自动下降 。

全局临时表 时自动创建该表中的会话 结束,所有 其他任务停止引用 它们丢弃。任务 与表之间的关联仅针对单个Transact-SQL 语句的 生命维护。这意味着全局 临时表被删除 完成的最后一个Transact-SQL 语句,该语句在 创建会话结束时正在积极引用 。

+0

“@”临时表的工作类似于“#”复位的名字临时表,但不能在定义它们的过程或批处理之外引用。 – 2009-08-07 21:59:16

+0

感谢您的澄清。那正是我需要的! – 2009-08-07 22:06:31

0

createing一个#tempTable在范围上局部的,但可以嵌套调用的存储过程

0

取决于“临时表”的含义。如果您的意思是前缀为#的表格,则其实名称将包含连接ID,并且每个连接都是唯一的。但是,如果您在tempdb数据库中手动创建表格,则会像所有普通表格那样对待它。

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/