本地临时表 和 全局临时表

来源:互联网 发布:beats入耳式耳机 知乎 编辑:程序博客网 时间:2024/06/10 05:25

缘起

     在写sp 的过程中, 发现用动态语句不能生成本地临时表, 数据库总报 “对象名 '#tmp_show' 无效” 的错误,真是百思不得其解。

 

     yiyi 非常郁闷, 开始在 csdn 上找帖子, 有类似问题的答复中, 有人说把表名变成 “##” 开头就能解决问题。 是这样么?  回去yiyi就把#tmp_show 全部替换成 ##tmp_show, 测试通过。 so why ??  求助 google 大神吧。。。

 

求解

 有人说:

临时对象都以#或##为前缀,临时表是临时对象的一种,还有例如临时存储过程、临时函数之类的临时对象,临时对象都存储在tempdb中。以#前缀的临时表为本地的,因此只有在当前用户会话中才可以访问,而##前缀的临时表是全局的,因此所有用户会话都可以访问。临时表以会话为边界,只要创建临时表的会话没有结束,临时表就会持续存在,当然用户在会话中可以通过DROP TABLE命令提前销毁临时表。

 

在执行动态语句时, 已经是另起一个连接,所以不能访问本地临时表,必须用全局临时表代替之。

 

 

原创粉丝点击