在我们的生产 SQL2000 实例上,我们有一个包含数百个存储过程的数据库,其中许多使用在代码中“早期”创建#TEMP 表的技术,然后各种内部存储过程由该父 sProc 执行。在 SQL2000 中,内部或“子”sProc 插入到#TEMP 或从#TEMP 中选择数据没有问题。简而言之,我假设他们都可以引用这个#TEMP,因为他们使用相同的连接。
在使用 SQL2008 进行测试时,我发现了两种不同行为的表现形式。首先,在设计时,新的“智能感知”功能在子 sProc 的 Management Studio EDIT 中抱怨 #TEMP 是“无效的对象名称”。但更糟糕的是,在执行时,调用的父 sProc 在嵌套的子 sProc 内失败。
有人建议解决方案是更改为##TEMP,这显然是一个全局临时表,可以从不同的连接中引用。
从追踪所有问题点的工作量以及从 Web 应用程序调用这些 sProcs(即多用户问题)时可能/可能的不良影响来看,这似乎过于激烈。
这确实是 SQL2005 或 SQL2008 关于#TEMP(本地临时表)的行为变化吗?我们跳过了 2005 年,但我想更准确地了解为什么会发生这种情况,然后再开始尝试破解所需的修复程序。谢谢。