首页 > 解决方案 > 将字符串数据插入 XML 列:'nil=\"true\"'

问题描述

SQL 服务器 2017

我正在尝试调试和重新设计一个 SSIS 包,该包从 Web 服务获取字符串数据,然后将其插入 SQL 表(插入 XML 类型的列)。

输入字符串数据如下所示:

<InvoiceInfo><acceptedDate nil=\"true\" /><.... more stuff...

数据的形成没有总体问题 - 全部正确终止,依此类推。但是 SQL Server 讨厌这样:nil=\"true\"。当我在 SSMS 中运行 SSIS 包生成的 SQL 时,出现以下错误:

XML 解析:第 1 行,字符 32,应为字符串文字

这可能是有充分理由的。我对 XML 了解不多,但 AFAIK 这个“\”转义并不真正属于那里。

如果我对输入字符串进行一些预处理,将 "nil=\"true\"" 替换为长度为零的字符串,它就可以工作。

最奇怪的是,当同样的 SQL 在 SSIS 包中的 ExecuteSQL 任务中运行时,它可以工作。我完全迷惑了。隐式类型转换不是问题;如果我添加一个显式 CONVERT 并在 SSMS 中运行它-

INSERT INTO TheTable(XMLcolumn) VALUES
(CONVERT(XML,'<InvoiceInfo><acceptedDate nil=\"true\" /><.... more stuff...'))

它仍然以同样的方式失败。

两个问题:

  1. 此 SQL 如何在 SSIS 中工作但在 SSMS 中失败?
  2. 这些 "nil=\"true\"" 值在 XML 中的作用是什么?

标签: sql-serverxmlssisetlsql-server-2017

解决方案


推荐阅读