日期:2014-05-18  浏览次数:20794 次

连接池与临时表的问题!
临时表是存在于整个session的生命周期的,只有session失效,临时表才会被删除,如果应用服务器端用的是数据源连接池,那么只有在整个数据源连接池失效的时候,临时表才会被删除。
如果我有个操作是进行insert   into   #tem   select   *   from   key,那么如果有两个人同时连接,不就是有可能插入临时表两次吗?本来我想使用表变量的,因为我认为表变量绝对不会出现并发性问题的。可惜的是程序要求这样执行
exex( 'insert   into   #tem   select   *   from   key '),如果使用事物那要怎么写才能有效解决这个问题,请大家帮忙解答,谢谢!

------解决方案--------------------
#tem 只是局部临时表,只存在你当前的会话中,就像应用程序中的局部变量,两个函数里面用同样的局部变量名,你说其中一个改变了另一个函数里的局部变量会改变吗?


##tem 这种就是全部临时表,也就是全局变量,如果是这样的临时表才会出现LZ说的情况
------解决方案--------------------
楼主可以在查询分析器两个不同的窗口里创建同名临时表,分别插入不同的数据,再两边SELECT一下,会发现同名临时表并不冲突。

好,再打开对象浏览器(F8):tempdb -> 用户表,接着会发现两个同名临是表并不同名,通过一大串的后缀区分,当然这个后缀是用SQL系统去维护的,不需要人为干预。