12

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

XML parsing: line 2, character 0, incorrect document syntax

这是我的代码

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

这是格式文件(标准格式文件,不是 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    ""

为什么我会收到一个 XML 错误?

4

3 回答 3

13

还有一点,以防万一其他人遇到这个......

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

MSDN 参考

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

于 2010-02-22T19:29:43.960 回答
8

确保 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

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

于 2012-07-17T09:29:37.490 回答
5

如果格式文件被编码为 Unicode,批量插入将自动认为它是一个 XML 文件并将其视为 XML 文件。确保文件被编码为ANSI,你应该没问题。

于 2010-01-28T13:04:13.680 回答