全部,
这里我有一个简单的查询,可以在任何使用 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 |查询} {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;
在您之前的相关问题中我告诉您1)使用
PRINT
并搜索语法错误。 2) 寻找缺失的空格
这个
@filename + '" ' + '-c -x' + @DatabaseName
导致
"C:\Users\jpathil\Desktop\sample.xml" -c -xALSCG-JPATHIL\SQLEXPRESS
一个问题是选项
-x
后缺少空白。可能是,这就是未知选项A的原因
服务器名称位于选项
-S
顺便说一句...
这是一个工作示例
提示 请注意,
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;
当 -e 选项和错误文件的路径之间存在空格字符时,我收到“bcp:未知选项 A”。 删除空格,问题就解决了。