【问题标题】:BCP in SQL Server causing errorsSQL Server 中的 BCP 导致错误
【发布时间】:2017-07-22 02:49:52
【问题描述】:

全部,

这里我有一个简单的查询,可以在任何人的机器上运行 SQL Server,其中创建了一个简单的表,然后我尝试通过 BCP 将其内容导出到 XML 文件。您所要做的就是将@DatabaseName、@filename、@query 替换为与您的机器相关的值。

当我运行查询 1 时,错误消息是

SQLState = S1000,NativeError = 0 错误 = [Microsoft][SQL Server Native Client 11.0]无法打开 BCP 主机数据文件。

当我运行查询 2 或 3 时,错误消息是

bcp.exe:未知选项 A 用法:bcp.exe {dbtable |查询} {在 |出去 |查询 |格式}数据文件。

我从 SQL Server Management Studio 运行它。我真的需要解决这个问题,请帮忙。

DECLARE @cmd  As VARCHAR(8000)
use CP

IF EXISTS(SELECT * FROM dbo.Dummy) DROP TABLE dbo.Dummy

Declare @DatabaseName VARCHAR(200)
Declare @filename VARCHAR(200)
Declare @query As varchar(max)


set @DatabaseName = 'ALSCG-JPATHIL\SQLEXPRESS'
set @filename = 'C:\Users\jpathil\Desktop\sample.xml'
set @query = 'SELECT * FROM [CP].[dbo].[Dummy]'

CREATE TABLE Dummy (BCP_Sucks VARCHAR(200),);
INSERT INTO Dummy VALUES ('Jean');
INSERT INTO Dummy VALUES ('Derrick')



Declare @teststring VARCHAR(2000)

-- Query 1

--set @teststring = 'bcp.exe ' + '"' + @query + '" ' + 'queryout' + ' "' + @filename + '" ' + '-c -T -x -S '  + @DatabaseName
--Query 2

--set @teststring = 'bcp.exe ' + '"' + @query + '" ' + 'queryout' + ' "' + @filename + '" ' + '-c -T -x'  + @DatabaseName
--Query 3

set @teststring = 'bcp.exe ' + '"' + @query + '" ' + 'queryout' + ' "' + @filename + '" ' + '-c -x'  + @DatabaseName



SET @cmd = @teststring

EXEC xp_cmdshell @cmd; 

【问题讨论】:

  • 这里的目标是在 SSMS 中运行脚本时生成一个简单的 XML 文件导入我的桌面
  • 有没有试过加个PRINT @teststring看看命令格式是否正确?

标签: sql sql-server xml compiler-errors bcp


【解决方案1】:

In your previous related question 我告诉过你 1) 使用PRINT 并搜索语法错误。以及 2) 搜索缺失的空白

这个

@filename + '" ' + '-c -x'  + @DatabaseName

导致

"C:\Users\jpathil\Desktop\sample.xml" -c -xALSCG-JPATHIL\SQLEXPRESS

一个问题是选项-x 后缺少空格。可能是,这就是 unknown option A

的原因

服务器名称遵循选项-S btw...

这是一个工作示例
提示请注意,C:\Users\... 指向您的本地计算机,而 BCP 在 SQL-Server 上下文中运行...

USE master;
GO
CREATE DATABASE TestDB;
GO
USE TestDB;
GO
-- To allow advanced options to be changed.  
EXEC sp_configure 'show advanced options', 1;  
RECONFIGURE;  
EXEC sp_configure 'xp_cmdshell', 1;  
RECONFIGURE;  
GO  

CREATE TABLE dbo.Dummy (BCP_Sucks VARCHAR(200),);
INSERT INTO dbo.Dummy VALUES ('Jean');
INSERT INTO dbo.Dummy VALUES ('Derrick');

GO
DECLARE @DatabaseName VARCHAR(200)=@@SERVERNAME;
DECLARE @filename VARCHAR(200)= 'C:\Users\jpathil\Desktop\sample.xml';
DECLARE @query As varchar(max)='SELECT * FROM TestDb.dbo.Dummy FOR XML AUTO;';

DECLARE @teststring VARCHAR(2000)
SET @teststring = 'bcp.exe "' + @query + '"  queryout "' + @filename + '" -w -T -S '  + @DatabaseName

PRINT @teststring;
EXEC xp_cmdshell @teststring; 
GO
USE master;
DROP DATABASE TestDb;

【讨论】:

    猜你喜欢
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    相关资源
    最近更新 更多