2017-03-02 80 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;