为什么bcp不能执行具有临时表(#tempTable)的程序?

时间:2014-06-18 20:07:03

标签: stored-procedures bcp sql-server-2008 sql-agent-job

最近,我的任务是创建一个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

1 个答案:

答案 0 :(得分:1)

你猜测这是#temp表的范围问题是正确的。

BCP作为一个单独的进程生成,因此表不再适用于新进程。 SSMS可能使用子流程,因此他们仍然可以访问#temp表。