2017-03-02 89 views
2

所有,BCP在SQL Server中导致错误

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

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

SQLSTATE = S1000,NativeError = 0错误= [微软] [SQL Server的 本机客户端11.0]无法打开BCP主数据文件。

当运行查询2或3所述错误消息是

的Bcp.exe:未知的选项的使用:{的Bcp.exe DBTABLE |查询} {in |出 |查询|格式}数据文件。

我从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; 
+0

这里的目标是生成一个简单的XML文件导入到我的桌面时运行在SSMS – jp3nyc

+0

脚本你尝试过加入'PRINT @ teststring',看看命令的格式是正确的? –

回答

1

In your previous related question我告诉你1)使用PRINT和搜索语法错误。 2)缺少的空白

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

信息搜索到

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

的一个问题是选择-x后失踪的空白。也许,是这里的未知选项的原因的

服务器名称如下选项-S顺便说一句...

这里的工作示例
提示要知道,C:\Users\...指向本地机器,而BCP正在运行在SQL服务器的上下文中...

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)[email protected]@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;