如何在SQL中避免存储XML <option> </option>,如<option>?</option>

时间:2013-05-28 21:57:43

标签: sql-server xml tsql sql-server-2005 xquery

当我尝试在SQL中存储XML而不是一个空元素时,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

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

Merging many rows in a single

2 个答案:

答案 0 :(得分:4)

我认为你不能,看看以下链接:

XML Data Type and Columns

根据这个(XML存储选项部分):

  

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

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

答案 1 :(得分:2)

<MIDDLENAME></MIDDLENAME>

<MIDDLENAME/>

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