Sql server 大容量插入无法忽略XML文件中的错误?

Sql server 大容量插入无法忽略XML文件中的错误?,sql-server,xml,bulkinsert,Sql Server,Xml,Bulkinsert,我创建了一个名为XMLTable的表,其中一列名为XMLCol,数据类型为xml 然后,我尝试使用SQL Server批量插入将数据插入表中: BULK INSERT [XMLTable] FROM 'F:\mydata.dat' WITH (DATAFILETYPE = 'widechar', FORMATFILE = 'F:\myformat.XML', MAXERRORS = 2147483647, ROWS_PER_BATCH = 1, TABLOCK); 我将MAXERRORS设置为

我创建了一个名为XMLTable的表,其中一列名为XMLCol,数据类型为xml

然后,我尝试使用SQL Server批量插入将数据插入表中:

BULK INSERT [XMLTable] FROM 'F:\mydata.dat' WITH (DATAFILETYPE = 'widechar', FORMATFILE = 'F:\myformat.XML', MAXERRORS = 2147483647, ROWS_PER_BATCH = 1, TABLOCK);
我将MAXERRORS设置为2147483647,以便大容量插入将忽略错误,并在遇到XML数据中的任何错误时继续插入剩余记录

我的格式文件(myformat.xml)是:

由于我按目的修改了数据文件,因此预期会出现错误。但是,大容量插入不会忽略该错误并插入第二条记录,即使我将MAXERROR指定为2147483647,为什么


根据位于的MS官方文档,它说“MAXERRORS=max_errors指定取消批量导入操作之前数据中允许的最大语法错误数。批量导入操作无法导入的每一行都将被忽略并计为一个错误。如果未指定max_errors,则默认值为10。”。那么为什么只有一个错误导致整个大容量插入失败?

您可以尝试使用以下方法。(1) 目标数据库表将使用
NVARCHAR(MAX)
数据类型来保存XML。(2)
TRY_CAST()
将向您显示XML或看起来像XML的有问题的字符串作为NULL

这样批量插入将始终正常工作,不会出现任何错误。如果有问题的XML格式不正确、包含错误字符或任何其他内容,您将能够对其进行故障排除

SQL

它还说,“MAX_ERRORS选项不适用于约束检查或转换money和bigint数据类型。”并且可能应该说“…以及转换为XML数据类型”,由于SQL Server需要有效的格式良好的XML数据,这些数据可以转换为InfoSet格式,以便存储为
XML
数据类型列和变量,请参阅:
<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <RECORD>
  <FIELD ID="1" xsi:type="NCharTerm" TERMINATOR="\x2C\x00"/>
 </RECORD>
 <ROW>
  <COLUMN SOURCE="1" xsi:type="SQLNVARCHAR" NULLABLE="YES"/>
 </ROW>
</BCPFORMAT>
Msg 9455, Level 16, State 1, Line 1
XML parsing: line 1, character 5, illegal qualified name character
USE tempdb;
GO

DROP TABLE IF EXISTS XMLTable;

CREATE TABLE XMLTable(XMLData NVARCHAR(MAX));

BULK INSERT [XMLTable]
FROM 'e:\Temp\XMLBulkINSERT\Data.DAT'
WITH
(
    DATAFILETYPE = 'widechar',
    FORMATFILE = 'e:\Temp\XMLBulkINSERT\Data_FORMATFILE.xml',
    MAXERRORS = 2147483647,
    ROWS_PER_BATCH = 12,
    TABLOCK
);

SELECT *
   , TRY_CAST(XMLData AS XML) AS RealXML
FROM dbo.XMLTable;