问题:如果多人同时调用存储过程,这个全局临时表会不会因为已经存在,等其他原因导致异常。
个人觉得可能是存在问题的,向大家求助,有问题的话如何解决比较合理?
谢谢
12 个解决方案
#1
向大家求助。
#2
如果出现并发将会出现2个会话引用同一个对象,如果你的存储过程里面涉及到创建删除表的话将有可能出现引用出错或者存储过程在运行的时候全局临时表被删除掉而报错的情况。这个你需要自己去权衡
#3
我有在存储过程的最后删除全局临时表
#4
如果是并发的情况下,可能会有问题。
比如会话1创建了临时表,然后这个时候,会话2上来了,一看临时表已存在,于是去访问。。。
#5
如果出现并发将会出现2个会话引用同一个对象,如果你的存储过程里面涉及到创建删除表的话将有可能出现引用出错或者存储过程在运行的时候全局临时表被删除掉而报错的情况。这个你需要自己去权衡
我有在存储过程的最后删除全局临时表
比方说会话1先执行,然后创建了全部临时表##A 运行到一半,然后会话2执行,看到##A已经创建了,要么就访问到会话1正在处理的数据,要不就会把会话1创建的##A删除掉,然后重建一个##A 。这个就出现问题了
#6
如果出现并发将会出现2个会话引用同一个对象,如果你的存储过程里面涉及到创建删除表的话将有可能出现引用出错或者存储过程在运行的时候全局临时表被删除掉而报错的情况。这个你需要自己去权衡
我有在存储过程的最后删除全局临时表
比方说会话1先执行,然后创建了全部临时表##A 运行到一半,然后会话2执行,看到##A已经创建了,要么就访问到会话1正在处理的数据,要不就会把会话1创建的##A删除掉,然后重建一个##A 。这个就出现问题了
请问有什么好的解决方案吗?
#7
如果出现并发将会出现2个会话引用同一个对象,如果你的存储过程里面涉及到创建删除表的话将有可能出现引用出错或者存储过程在运行的时候全局临时表被删除掉而报错的情况。这个你需要自己去权衡
我有在存储过程的最后删除全局临时表
如果是并发的情况下,可能会有问题。
比如会话1创建了临时表,然后这个时候,会话2上来了,一看临时表已存在,于是去访问。。。
除了全局临时表,请问还有其他的方法吗?
#8
你的临时表,是怎么定义的 ?
#9
如果这样的话可以试下用表变量。或者可以建个普通表,每次插入的时候记录一个标识列或者什么的,调用完之后把数据删除掉应该也OK
#10
你的临时表,是怎么定义的 ?
##tableName
#11
你的临时表,是怎么定义的 ?
##tableName
你是不是想建立一个全局临时表,然后这4个存储过程,共享一个 临时表的数据对吗?
但是并发的情况下,数据可能会出现混乱的情况。建议如果可以的化,可以让每个会话创建属于自己的全局临时表,比如:
select @@spid
是会话id,在创建全局临时表的时候,按照 ##tablename_回话id 这样多个并发的会话,就不会冲突了
#12
你的临时表,是怎么定义的 ?
##tableName
你是不是想建立一个全局临时表,然后这4个存储过程,共享一个 临时表的数据对吗?
但是并发的情况下,数据可能会出现混乱的情况。建议如果可以的化,可以让每个会话创建属于自己的全局临时表,比如:
select @@spid
是会话id,在创建全局临时表的时候,按照 ##tablename_回话id 这样多个并发的会话,就不会冲突了
幡然醒悟,非常感谢!
#1
向大家求助。
#2
如果出现并发将会出现2个会话引用同一个对象,如果你的存储过程里面涉及到创建删除表的话将有可能出现引用出错或者存储过程在运行的时候全局临时表被删除掉而报错的情况。这个你需要自己去权衡
#3
如果出现并发将会出现2个会话引用同一个对象,如果你的存储过程里面涉及到创建删除表的话将有可能出现引用出错或者存储过程在运行的时候全局临时表被删除掉而报错的情况。这个你需要自己去权衡
我有在存储过程的最后删除全局临时表
#4
如果出现并发将会出现2个会话引用同一个对象,如果你的存储过程里面涉及到创建删除表的话将有可能出现引用出错或者存储过程在运行的时候全局临时表被删除掉而报错的情况。这个你需要自己去权衡
我有在存储过程的最后删除全局临时表
如果是并发的情况下,可能会有问题。
比如会话1创建了临时表,然后这个时候,会话2上来了,一看临时表已存在,于是去访问。。。
#5
如果出现并发将会出现2个会话引用同一个对象,如果你的存储过程里面涉及到创建删除表的话将有可能出现引用出错或者存储过程在运行的时候全局临时表被删除掉而报错的情况。这个你需要自己去权衡
我有在存储过程的最后删除全局临时表
比方说会话1先执行,然后创建了全部临时表##A 运行到一半,然后会话2执行,看到##A已经创建了,要么就访问到会话1正在处理的数据,要不就会把会话1创建的##A删除掉,然后重建一个##A 。这个就出现问题了
#6
如果出现并发将会出现2个会话引用同一个对象,如果你的存储过程里面涉及到创建删除表的话将有可能出现引用出错或者存储过程在运行的时候全局临时表被删除掉而报错的情况。这个你需要自己去权衡
我有在存储过程的最后删除全局临时表
比方说会话1先执行,然后创建了全部临时表##A 运行到一半,然后会话2执行,看到##A已经创建了,要么就访问到会话1正在处理的数据,要不就会把会话1创建的##A删除掉,然后重建一个##A 。这个就出现问题了
请问有什么好的解决方案吗?
#7
如果出现并发将会出现2个会话引用同一个对象,如果你的存储过程里面涉及到创建删除表的话将有可能出现引用出错或者存储过程在运行的时候全局临时表被删除掉而报错的情况。这个你需要自己去权衡
我有在存储过程的最后删除全局临时表
如果是并发的情况下,可能会有问题。
比如会话1创建了临时表,然后这个时候,会话2上来了,一看临时表已存在,于是去访问。。。
除了全局临时表,请问还有其他的方法吗?
#8
你的临时表,是怎么定义的 ?
#9
如果这样的话可以试下用表变量。或者可以建个普通表,每次插入的时候记录一个标识列或者什么的,调用完之后把数据删除掉应该也OK
#10
你的临时表,是怎么定义的 ?
##tableName
#11
你的临时表,是怎么定义的 ?
##tableName
你是不是想建立一个全局临时表,然后这4个存储过程,共享一个 临时表的数据对吗?
但是并发的情况下,数据可能会出现混乱的情况。建议如果可以的化,可以让每个会话创建属于自己的全局临时表,比如:
select @@spid
是会话id,在创建全局临时表的时候,按照 ##tablename_回话id 这样多个并发的会话,就不会冲突了
#12
你的临时表,是怎么定义的 ?
##tableName
你是不是想建立一个全局临时表,然后这4个存储过程,共享一个 临时表的数据对吗?
但是并发的情况下,数据可能会出现混乱的情况。建议如果可以的化,可以让每个会话创建属于自己的全局临时表,比如:
select @@spid
是会话id,在创建全局临时表的时候,按照 ##tablename_回话id 这样多个并发的会话,就不会冲突了
幡然醒悟,非常感谢!