我已经阅读了临时表和范围的主题,我看到的所有答案似乎都没有谈到我的担忧之一。
据我所知,本地临时表的范围仅在存储过程或子存储过程的生命周期内有效。然而并发方面的情况如何。即,如果我有一个存储过程创建一个临时表,该临时表是从两个不同的进程但从同一用户/连接字符串调用的,那么该临时表是否会在对该存储过程的两次调用之间共享,或者是否会出现以下情况:对存储过程的每次调用都会创建一个唯一的临时表实例。
我假设临时表属于存储过程调用的范围,但我想在我继续这样做之前确定一下。
本地临时表(以#开头)仅限于您的会话;其他会话,即使来自相同的用户/连接字符串,也看不到它们。生存期的规则取决于本地临时表是否是在存储过程中创建的:
- 当存储过程结束时,存储过程中创建的本地临时表将被删除;其他存储过程或调用进程看不到它们。
- 当会话结束时,其他本地临时表将被删除。
全局临时表(以##开头)在会话之间共享。它们会在以下情况下被丢弃:
这个命令可以很方便地查看存在哪些临时表:
select TABLE_NAME from tempdb.information_schema.tables
如果您不确定临时表是否存在,可以很方便地删除它们:
if object_id('tempdb..#SoTest') is not null drop table #SoTest
看到这个MSDN 文章 http://msdn.microsoft.com/en-us/library/aa258255(SQL.80).aspx了解更多信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)