Daf*_*ins 46 sql t-sql sql-server
我已经阅读了临时表和范围的主题,我所看到的所有答案似乎都没有谈到我的一个问题.
我知道本地临时表的作用域仅对存储过程或子存储过程的生命周期有效.然而,关于确定性的情况如何.即,如果我有一个存储过程创建一个临时表,该临时表是从两个不同的进程调用但来自相同的用户/连接字符串,那么临时表是否会在对该一个存储过程的两次调用之间共享,或者是每次调用存储过程都会创建一个唯一的临时表实例.
我假设临时表属于对存储过程的调用范围,但我想确定在我走这条路径之前.
And*_*mar 76
本地临时表(以#开头)仅限于您的会话; 其他会话,即使是来自同一用户/连接字符串,也看不到它们.生命周期的规则取决于是否在存储过程中创建了本地临时表:
全局临时表(以##开头)在会话之间共享.他们在下列时被删除:
此命令可以方便地查看存在哪些临时表:
select TABLE_NAME from tempdb.information_schema.tables
Run Code Online (Sandbox Code Playgroud)
如果您不确定它们是否存在,这对于删除临时表非常方便:
if object_id('tempdb..#SoTest') is not null drop table #SoTest
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅此MSDN文章.
Mar*_*nnw 11
临时表将可访问创建它的过程的实例
以下脚本
Exec ('Select 1 as col Into #Temp Select * From #Temp')
Exec ('Select 2 as col Into #Temp Select * From #Temp')
Run Code Online (Sandbox Code Playgroud)
返回
Col
1
Col
2
Run Code Online (Sandbox Code Playgroud)
不
Col
1
2
Run Code Online (Sandbox Code Playgroud)
或者因为表已经存在而出错.
临时表也可以由初始过程运行的任何"子"程序访问.