端午节好,不知道有没大神帮忙。
我一个存储过程,里面建了个临时表 #t,经过多重条件的运算后,得到#t,处理完成后,也drop了。
可是我程序中开5个线程执行这个存储过程的时候,开始一直都还好,后来就报错,#t不存在,报错的频率有点高,数据库好像也慢了。
问题是我存储过程开始就
create table #t(.....)
中间操作
drop table #t
------解决方案--------------------
你这里多个线程创建和使用相同名称的临时表,我建议你修改下临时表的名称,在后面加上一个时间戳,这样就能保证每个临时表都是唯一的。
------解决方案--------------------
同意godbless_zf 的说法,建临时表不同于正是表,要注意线程占用的问题,使用不当会降低系统效率
------解决方案--------------------
加个newguid也行,和加时间戳是一样的效果,我们的目的就是为了每次创建的临时表名称唯一
------解决方案--------------------
如果#t是局部临时表(非全局临时表),开5个线程执行这个存储过程时应该是不会互相影响的.
建议针对详细的错误信息进行排查.
------解决方案--------------------
把错误贴出来
------解决方案--------------------
##在创建它的会话还没结束前,可以供其他会话使用,但是创建全局临时表的会话结束后,全局临时表一样会失效,如果数据量不大,可以考虑用表变量或者CTE替代。
------解决方案--------------------
在过程中用CTE替代试试。如果还是不行的话,再检查是不是有循环或者其他的导致的错误。
------解决方案--------------------
create table #t(.....)
中间操作
drop table #t
你先建了一个表,然后进行操作,存储过程执行结果时,你却把表删了
------解决方案--------------------
你最好是判断如果表存在drop table #t,然后
建表,最后操作
------解决方案--------------------
if object_id(tempdb..#t) is not null
drop table #t
create table #t
..