【问题标题】:bcp won't output temp tablesbcp 不会输出临时表
【发布时间】:2014-11-04 00:20:15
【问题描述】:

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

一切都很好,但我不能用 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)

错误信息是invalid object #Extractr

谢谢!

【问题讨论】:

    标签: sql bcp


    【解决方案1】:

    几天前我偶然发现了这个。

    我从这个链接学到了什么:

    http://www.dbforums.com/microsoft-sql-server/1605565-can-we-have-temporary-table-store-procedure-when-using-bcp.html

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

    此外,我通过将本地临时表替换为全局临时表来开始工作(## 而不是 # 用一个简单的替换帮助了我)。

    正如@Kevin 在 cmets 中提到的,您也可以将表变量用于相同目的。

    希望这对你有用。

    【讨论】:

    • 另一种方法是使用table variables
    • 这个“错误”也击中了我。存储过程存储中介在选择它们之前会生成一个临时表,并且它不适用于 BCP。将其更改为表变量是可行的(尽管表变量有其自身的问题——stackoverflow.com/questions/11857789/…)。全局临时表也可以,但您可能会遇到并发问题。
    【解决方案2】:

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

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

    【讨论】:

    • 选择它们工作正常,这只是 BCP 部分。我已尝试更新 bcp 以使用“tempdb..#Extractr”,但这不起作用:Warning = [Microsoft][SQL Server Native Client 10.0][SQL Server]Database name 'tempdb' ignored, referencing object in tempdb.
    【解决方案3】:

    使用表变量而不是临时表帮助我弄清楚了。

    DECLARE @tbl1 TABLE
    (fld1 int,...)
    
    INSERT INTO @tbl1 
    SELECT * FROM Table1 
    

    【讨论】:

      猜你喜欢
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 2012-07-21
      • 2014-08-09
      • 1970-01-01
      • 1970-01-01
      • 2013-10-27
      • 1970-01-01
      相关资源
      最近更新 更多