Sql bcp赢得';输出温度表

Sql bcp赢得';输出温度表,sql,bcp,Sql,Bcp,我有一个在临时表中存储值的存储过程 这一切都很好,但我不能用bcp exec master..xp_cmdshell 'bcp "exec sp_test '2006-07-21' " queryout c:\test.txt -c ' 如果我把桌子换成普通的,那么一切都会好起来。你不能这样使用临时表吗 我不一定想分享代码,因为它包含公司的东西,但基本上是这样的 SELECT * INTO #Extractr FROM TABLE A WHERE ID in (4,9,14) 错误消息

我有一个在临时表中存储值的存储过程

这一切都很好,但我不能用bcp

exec master..xp_cmdshell 'bcp "exec sp_test '2006-07-21' " queryout c:\test.txt -c '
如果我把桌子换成普通的,那么一切都会好起来。你不能这样使用临时表吗

我不一定想分享代码,因为它包含公司的东西,但基本上是这样的

SELECT 
* 
INTO #Extractr
FROM 
TABLE A
WHERE ID in (4,9,14)
错误消息是
无效对象#提取器


谢谢

我几天前才偶然发现这一点

我从这个链接中学到:

它不会看到temp表,因为它们在tempdb数据库中,而不是您正在使用的数据库中

此外,我还通过将本地临时表替换为全局临时表(用一个简单的替换来代替,这对我很有帮助)

正如@Kevin在评论中提到的,您也可以出于同样的目的使用表变量


希望这对您有用。

您在查询中是否尝试过像这样引用temp表:
tempdb..#extractor
例如:

SELECT 
* 
INTO tempdb..#Extractr
FROM 
TABLE A
WHERE ID in (4,9,14)

使用表变量而不是临时表帮助我解决了这个问题

DECLARE @tbl1 TABLE
(fld1 int,...)

INSERT INTO @tbl1 
SELECT * FROM Table1 

另一种方法是使用这个“bug”也会影响我。存储的proc存储的中间层在选择它们之前会生成一个临时表,它不适用于BCP。将其更改为表变量是可行的(尽管表变量也有自己的问题--)。全局临时表也可以,但您可能会遇到并发问题。选择它们也可以,这只是BCP部分。我已尝试将bcp更新为使用“tempdb..#extractor”,但无效:
Warning=[Microsoft][SQL Server Native Client 10.0][SQL Server]数据库名称“tempdb”被忽略,引用了tempdb中的对象