在MS SQL Server中批量插入时,为什么会出现"XML解析:第2行,字符0,不正确的文档语法"

Cro*_*ros 11 sql-server bulkinsert bcp

我正在使用FMT格式文件对表进行BULK INSERT,但是我收到以下错误:

XML parsing: line 2, character 0, incorrect document syntax
Run Code Online (Sandbox Code Playgroud)

这是我的代码

BULK INSERT [DM_Flux].[dbo].[Stage] FROM 'C:\temp\data.dat'
WITH (FORMATFILE = 'C:\temp\FormatBcp.fmt')
Run Code Online (Sandbox Code Playgroud)

这是formatfile(标准格式文件,而不是XML):

10.0
5
1   SQLCHAR 0   2   ""  1   Id  ""
2   SQLCHAR 0   40  ""  2   Name    ""
3   SQLCHAR 0   50  ""  3   Street  ""
4   SQLCHAR 0   8   ""  4   StreetNo    ""
5   SQLCHAR 0   300 "\r\n"  7   BulkData    ""
Run Code Online (Sandbox Code Playgroud)

为什么我会遇到XML错误?

eck*_*cko 12

还有另外一点,万一其他人遇到这个......

如果您确定该文件是ANSI但仍然出现此错误,请检查格式文件的第一行(版本号).版本号必须与您的SQL版本号匹配(或者是旧版本号).

MSDN参考:

用于读取格式文件的bcp实用程序(Bcp.exe)的版本必须与用于创建格式文件的版本相同或更高.例如,SQL Server 2008中BCP可以读取一个9.0版格式的文件,这是由SQL Server 2005 BCP产生,但SQL Server 2005 BCP无法读取10.0版本格式的文件,该文件由SQL Server 2008 BCP产生.


小智 7

确保MS SQL服务器无法读取版本格式的好方法,降级.FMT文件中的版本号.将V10.0更改为9.0或更低.MS SQL 2008可以读取较低版本,但2005无法读取更高版本.因此降级版本数量可能有助于解决问题.

bcp实用程序的版本号:

 9.0 = SQL Server 2005 
10.0 = SQL Server 2008
11.0 = SQL Server 2012
12.0 = SQL Server 2014
Run Code Online (Sandbox Code Playgroud)

对于非XML格式文件,您可以参考Microsoft页面:http://msdn.microsoft.com/en-us/library/ms191479.aspx.


Cro*_*ros 5

如果格式文件被编码为 Unicode,批量插入将自动认为它是 XML 文件并按此处理。确保文件编码为ANSI就可以了。