为啥在 MS SQL Server 中批量插入时出现“XML 解析:第 2 行,字符 0,文档语法不正确”
Posted
技术标签:
【中文标题】为啥在 MS SQL Server 中批量插入时出现“XML 解析:第 2 行,字符 0,文档语法不正确”【英文标题】:Why do I get "XML parsing: line 2, character 0, incorrect document syntax" when Bulk Inserting in MS SQL Server为什么在 MS SQL Server 中批量插入时出现“XML 解析:第 2 行,字符 0,文档语法不正确” 【发布时间】:2011-01-10 09:50:46 【问题描述】:我正在使用 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 错误?
【问题讨论】:
【参考方案1】:确保 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 格式的文件可以参考微软页面:http://msdn.microsoft.com/en-us/library/ms191479.aspx。
【讨论】:
【参考方案2】:还有一点,以防万一其他人遇到这种情况......
如果您确定文件是 ANSI 但仍然收到此错误,请检查格式文件的第一行(版本号)。版本号必须与您的 SQL 版本号匹配(或为旧版本号)。
MSDN reference:
用于读取格式文件的 bcp 实用程序 (Bcp.exe) 版本必须与用于创建格式文件的版本相同或更高。例如,SQL Server 2008 bcp 可以读取 SQL Server 2005 bcp 生成的 9.0 版格式文件,但 SQL Server 2005 bcp 无法读取 SQL Server 2008 bcp 生成的 10.0 版格式文件。
【讨论】:
【参考方案3】:如果格式文件被编码为 Unicode,批量插入将自动认为它是一个 XML 文件并将其视为 XML 文件。确保文件被编码为 ANSI,你应该没问题。
【讨论】:
交叉。确实!它终于奏效了。 @inon:在 Notepad++ 中打开格式文件并通过编码菜单更改为 ANSI。实际上,我首先创建了一个新的空白文件,然后更改了编码,然后从旧格式文件中粘贴了以前的内容。 xml 错误消失了。以上是关于为啥在 MS SQL Server 中批量插入时出现“XML 解析:第 2 行,字符 0,文档语法不正确”的主要内容,如果未能解决你的问题,请参考以下文章
尝试将数据表批量插入 SQL Server 时出现 InvalidOperationException