最近,我的任务是创建一个SQL Server作业来自动创建CSV文件。现有的代码使用了各种各样的#temp表。
当我设置要使用BCP执行的作业调用现有代码(转换为过程)时,我不断收到错误:
SQLState = S0002, NativeError = 208
Error = [Microsoft][SQL Native Client][SQL Server]Invalid object name #xyz
如其他帖子所述,要解决此问题,很多人建议将所有#tempTables转换为@tableVariables。
但是,我想了解为什么BCP似乎无法使用#tempTables? 当我在SSMS中执行相同的程序时,它可以工作!?为什么?
我确实在一个过程中使用全局临时表进行了一个快速而简单的测试,并且似乎通过使用BCP的作业成功,所以我假设它与#tempTables的范围有关!
提前感谢您的回复/澄清。
DTML
答案 0 :(得分:1)
你猜测这是#temp表的范围问题是正确的。
BCP作为一个单独的进程生成,因此表不再适用于新进程。 SSMS可能使用子流程,因此他们仍然可以访问#temp表。