2

当我尝试将 XML 存储在 SQL 中而不是拥有一个空元素时,SQL 只需更改它并使用元素的一个标签来存储它。例如,要存储的 XML 是:

<ROOT>
    <FIRSTNAME>ROGER</FIRSTNAME>
    <MIDDLENAME></MIDDLENAME>
</ROOT>

然后Sql像这样存储它

    <ROOT>
        <FIRSTNAME>ROGER</FIRSTNAME>
        <MIDDLENAME />
    </ROOT>

sql更新非常简单:

UPDATE 
    SESIONESREPORTES
   SET 
    SER_PARAMETROS = '
        <ROOT>
               <FIRSTNAME>ROGER</FIRSTNAME>
               <MIDDLENAME></MIDDLENAME>
        </ROOT>'
 WHERE SER_ID=7

我需要这样,因为当元素为空时,我有一些查询失败,你可以在这里看到它..

将多行合并为一个

4

2 回答 2

4

我认为您不能,请查看以下链接:

XML 数据类型和列

据此(XML 存储选项部分):

数据存储在保留数据的 XML 内容的内部表示中。此内部表示包括有关包含层次结构、文档顺序以及元素和属性值的信息。具体来说,会保留 XML 数据的 InfoSet 内容。有关 InfoSet 的更多信息,请访问 http://www.w3.org/TR/xml-infoset。InfoSet 内容可能不是文本 XML 的相同副本,因为不保留以下信息:无关紧要的空格、属性顺序、名称空间前缀和 XML 声明。

因此内部存储将删除它认为不必要的所有部分,文档继续说明如果您需要 XML 文档的精确副本而不仅仅是内容,您应该使用 [n]varchar(max) 或 varbinary(最大限度)

于 2013-05-29T09:02:47.110 回答
2
<MIDDLENAME></MIDDLENAME>

<MIDDLENAME/>

是等价的;任何 XML 解析器都会以相同的方式对待它们 - 作为一个空元素。如果您的查询在空元素上失败,它将在其中任何一个上失败。您需要重写查询以处理空元素,在元素中放置一些内容<MIDDLENAME>,或者完全省略元素(如果您的查询可以处理它的缺失。)

于 2013-05-29T11:56:55.640 回答