无法打开BCP主机数据文件

use*_*607 17 sql sql-server bcp

以下是BCP声明的示例.我不习惯使用BCP,所以非常感谢您的帮助和坦率

我也在使用格式文件.

如果我从CMD提示执行它工作正常但从SQL我得到错误.BCP语句全部在一行,SQL Server代理作为本地系统运行.SQL服务器和脚本位于同一系统上.

我运行了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
Run Code Online (Sandbox Code Playgroud)

这是格式文件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    
Run Code Online (Sandbox Code Playgroud)

由于在此帖子中格式化,格式文件的最后一列被截断,但读取SQL_Latin1_General_CP1_CI_AS文档日期以外的每列.

小智 14

输出路径是否存在?在尝试创建文件之前,BCP不会创建该文件夹.

在BCP通话之前尝试此操作:

EXEC xp_cmdshell 'MKDIR "E:\Storage\Export\Data\"'
Run Code Online (Sandbox Code Playgroud)


CRA*_*DBA 5

首先,通过做一个简单的'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
Run Code Online (Sandbox Code Playgroud)

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


在此输入图像描述

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

在此输入图像描述


小智 5

请检查,该文件可能在另一个应用程序或程序中打开.如果是这种情况,bcp.exe无法覆盖现有的文件内容.


小智 5

就我而言,我通过以下方式解决了该问题:

我的命令是:

bcp "select Top 1000 * from abc.dbo.abcd" queryout FileNameWithDirectory -c -t "|" -r "0x0a" -S 192.111.1.111 -U xx -P xxxxx
Run Code Online (Sandbox Code Playgroud)

我的 FileNameWithDirectory 太长。喜欢"D:\project-abc\R&D\abc-608\FilesNeeded\FilesNeeded\DataFiles\abc.csv"

我更改为一个更简单的目录,例如:"D:\abc.csv"

问题解决了。

所以我猜测问题是由于文件名超出造成的。因此找不到该文件。