当我尝试在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
我需要这样,因为我有一些查询在元素为空时失败,你可以在这里看到..
答案 0 :(得分:4)
我认为你不能,看看以下链接:
根据这个(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>
元素中,或者完全省略元素(如果您的查询可以处理它不存在。)