以下是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
该文档日期以外的每一列。
首先,通过执行简单的'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代理已禁用。输出文件已创建。
我按照您的建议通过硬编码路径来修改了代码,但出现了同样的错误。无法打开主机数据文件。
您可以在帖子上粘贴实际错误的屏幕截图吗?执行完EXEC后,您可以打印@@ ERROR以查看是否存在错误代码吗?
另外,您可以查看正在使用的目录和文件的权限吗?上面的示例在您的环境中工作吗?
还有更多建议:1-更改文件名。使用减号可能是一个问题。2-为什么输出中没有定界符?将“ $#Y#$”更改为“,”,将“”更改为相同,以查看是否存在问题。这是权限问题或命令问题。无法告诉手头没有数据库。
我知道了!因为我指定了BCP.exe的位置,所以我想尝试将.fmt文件移动到从“ C:\ Program Files \ Microsoft SQL Server \ 100 \ Tools \ Binn \”执行BCP的位置工作了。太谢谢你了