SQL Server 2016-临时表会保留过去的子进程?

问题描述

我遇到一个间歇性问题,从proc中调用了临时表。我将尝试描述这种情况。

  • 我正在从Java运行大型sql字符串。
  • 此字符串调用多个proc,包括我称为ProcA和ProcB的proc。
  • 作为ProcA的一部分,我使用SELECT INTO #roles创建了一个临时表#roles。此过程没有没有名为cycleid的列。
  • 作为ProcB的一部分,我还使用SELECT INTO #roles创建了一个临时表#roles。此过程确实一个名为cycleid的列。

在大多数情况下,这可以按预期工作。我对这种情况下的临时表的理解是,一旦创建它们的proc完成运行,它们就会被销毁。而且由于它们都是主语句的“子代”,因此它们不应能够访问彼此的临时表。

尽管有时,我会收到以下错误消息:

:Exception :: com.inet.tds.sqlException:消息207,级别16,状态1,过程ProcB,第123行,sqlstate S0022 [QA-SERVER]无效的列名'cycleid'

似乎服务器正在读取错误的临时表或假定该表的结构错误(目前应该已将其销毁)。

有人对我有一个解释,或者一个方向,我可以开始做更多的研究来弄清楚这一点吗?谢谢大家。

有一种变通方法是将所有临时表重命名为唯一的或删除它们,但这是重构和测试的很多

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)