【问题标题】:Getting "unable to switch the encoding" warning when trying to call stored procedure in SQL Server for inserting XML data into a Delta table尝试在 SQL Server 中调用存储过程以将 XML 数据插入 Delta 表时出现“无法切换编码”警告
【发布时间】:2019-02-28 19:51:11
【问题描述】:

我正在使用 Biztalk 将 XML 文件中的数据插入 SQL 服务器。为此,我创建了一个存储过程,它根据 XML 文件中的数据将新记录插入到表中。

我在将文件放到接收位置时遇到了编码问题。

在消息日志中它会抛出以下警告:

XML解析:第1行,第38个字符,无法切换编码

并且数据没有被插入到我的表中。

XML 文件以 UTF-8-BOM 编码。

我尝试将其转换为 UTF-16、UTF-8,但它给出了相同的警告。

在我的 SQL 存储过程中,我声明了“iXml”变量并将其转换为 NVARCHAR(MAX):

    @iXml XML
AS
BEGIN

 SET @iXml = CAST(CAST (@iXml AS NVARCHAR(MAX)) AS XML) 

如何正确编码我的 XML 文件? SQL 对 XML 的期望是什么编码?

编辑:XML sn-p

<ns0:Vejstykke xmlns:ns0="http://Company.Vejregister.Schemas.Vejstykke_XML">
    <Data>
        <sekvensnummer>483523</sekvensnummer>
        <tidspunkt>2018-01-14T02:08:38.432Z</tidspunkt>
        <operation>insert</operation>
        <id/>
        <kommunekode>0326</kommunekode>
        <vejkode>2901</vejkode>
        <oprettet/>
        <ændret/>
        <navn>Hedvigsvej</navn>
        <vejnavn>Hedvigsvej</vejnavn>
        <navngivenvej_id/>
    </Data>

【问题讨论】:

  • 你能附上失败的 XML 吗?您应该能够在 without BOM 的情况下重新打开/重新保存文件(notepad++ 可以做到这一点,我肯定知道 SublimeText 也可以)。删除 BOM 后,您应该能够很好地解析它
  • 你好,Xedni。我尝试删除 BOM 并使用编码 UTF-8 发送文件,但它给出了相同的错误。
  • 那你能把失败的xml(或代表sn-p)包括进来吗?
  • select cast(cast(@iXML as nvarchar(max)) as xml) 在您提供的 xml 上似乎对我来说运行得很好。
  • 这很奇怪。您需要更多信息吗? Xml 文件没有编码声明。我的表使用 NVARCHAR 数据类型来存储 xml 数据。

标签: sql-server xml casting encode


【解决方案1】:

我设法修复了错误。问题出在我的自定义发送管道中,该管道使用默认编码类型向文件添加了 XML 声明。

【讨论】:

  • 请考虑发布更完整的“之前”和“之后”,以便未来的读者可以从这个问题中学习。就像一些在 xml 之前和 xml 之后。即使有自己的答案,“给予”社区也很重要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
  • 2016-03-28
  • 2016-11-09
  • 2018-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多