临时表在存储过程之间的作用域
存储过程中的临时表#table在编程中比较常见,今天在排查一处错误时,发现了一个细节规则,如下:
问题背景:存储过程A,其调用一个子存储过程B。
1.父存储过程声明临时表#a:
在声明的语句之后,调用其子存储过程B过程中,B的内容是直接可以完全访问临时表#a的,因为存储过程A还在执行,没有结束。但如果声明的语句在调用的子存储过程B之后,那么存储过程B是无法访问到临时表#a的。
2.在子存储B中声明临时表#a:
在父存储过程的任何地方都无法访问子存储过程B中声明的临时表#a,因为临时表#a只存在于存储过程B的执行会话中,所以在调用存储过程B之前访问临时表#a,由于还没有开始会话,所以临时表还未创建,因为无法访问,在调用存储过程B之后,由于会话已经结束,因此也无法访问。总之,在父存储过程中无法访问子存储过程声明的临时表。
总结:只有先在父存储过程声明临时表,之后才可以在子存储过程进行访问临时表,除此之外,父子存储过程之间的临时表都无法互访。