温馨提示:本文翻译自stackoverflow.com,查看原文请点击:sql - Unable to open BCP host data-file
bcp sql sql-server

sql - 无法打开BCP主机数据文件

发布于 2020-05-18 16:53:31

以下是BCP声明的示例。我不习惯使用BCP,因此非常感谢您的帮助和坦诚

我也将其与格式文件一起使用。

如果我从CMD提示符下执行,则可以正常工作,但是从SQL收到错误。BCP语句全部在一行上,并且SQL Server代理作为本地系统运行。SQL Server和脚本位于同一系统上。

我运行了exec master..xp_fixeddrives C,45589 E,423686

我试过输出到C和E具有相同的结果

EXEC xp_cmdshell 'bcp "Select FILENAME, POLICYNUMBER, INSURED_DRAWER_100, POLICY_INFORMATION, DOCUMENTTYPE, DOCUMENTDATE, POLICYYEAR FROM data.dbo.max" queryout "E:\Storage\Export\Data\max.idx" -fmax-c.fmt -SSERVERNAME -T

这是格式文件rmax-c.fmt

10.0

7

1      SQLCHAR             0       255     "$#Y#$"          1     FILENAME                               
2      SQLCHAR             0       40      ""               2     POLICYNUMBER                                 
3      SQLCHAR             0       40      ""               3     INSURED_DRAWER_100                           
4      SQLCHAR             0       40      ""               4     POLICY_INFORMATION                           
5      SQLCHAR             0       40      ""               5     DOCUMENTTYPE                                 
6      SQLCHAR             0       40      ""               6     DOCUMENTDATE                                 
7      SQLCHAR             0       8       "\r\n"           7     POLICYYEAR    

由于这篇文章中的格式,格式文件的最后一列被截断,但会读取SQL_Latin1_General_CP1_CI_AS该文档日期以外的每一列。

查看更多

提问者
user2747607
被浏览
5
CRAFTY DBA 2013-09-05 03:49

首先,通过执行简单的'dir c:*。*'排除xp_cmdshell问题;

查看有关使用BCP导出文件的博客

我的系统出现问题,无法找到BCP.EXE的路径。

要么更改其硬编码的PATH变量。

以下示例适用于Adventure Works。

-- BCP - Export query, pipe delimited format, trusted security, character format
DECLARE @bcp_cmd4 VARCHAR(1000);
DECLARE @exe_path4 VARCHAR(200) = 
    ' cd C:\Program Files\Microsoft SQL Server\100\Tools\Binn\ & ';
SET @bcp_cmd4 =  @exe_path4 + 
    ' BCP.EXE "SELECT FirstName, LastName FROM AdventureWorks2008R2.Sales.vSalesPerson" queryout ' +
    ' "C:\TEST\PEOPLE.TXT" -T -c -q -t0x7c -r\n';
PRINT @bcp_cmd4;
EXEC master..xp_cmdshell @bcp_cmd4;
GO

在将SQL Server 2012的路径更改为\ 110 \并将数据库名称更改为[AdventureWorks2012]之前,我收到以下错误。


在此处输入图片说明

进行更改后,该代码可以从SSMS正常工作。该服务在NT AUTHORITY \ Local Service下运行。SQL Server代理已禁用。输出文件已创建。

在此处输入图片说明