2013-05-28 42 views
2

當我試圖在SQL中存儲一個XML而不是空元素時,SQL只需更改它,然後僅使用該元素的一個標記進行存儲。 例如,XML存儲是:如何避免在SQL中存儲XML <option></option>像<option />?

<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

+1

數據如何進入數據庫?看起來您需要修改該代碼才能實現此目的。 – Gramma2005

+0

你應該看看你如何提取數據並修改它。 –

回答

2
<MIDDLENAME></MIDDLENAME> 

<MIDDLENAME/> 

是等價;任何XML解析器都會將它們作爲一個空元素來對待它們。如果你的查詢在一個空元素上失敗,它將會失敗。您需要重寫查詢來處理空元素,將一些內容放在<MIDDLENAME>元素中,或者完全省略元素(如果您的查詢可以處理它的缺失)。

+0

實際上,解決方案是SELECT @SQL = REPLACE(@SQL,' ','')在查詢中。thx u Will – Artemination

4

我不認爲你可以,看下面的鏈接:

XML Data Type and Columns

根據這個(XML存儲選項部分):

的數據存儲在內部表示法,用於保留數據的XML內容 。此內部表示形式包括有關包含層次結構,文檔順序以及元素和屬性值的 信息。具體而言,保留了 XML數據的InfoSet內容。有關InfoSet的更多信息,請訪問 http://www.w3.org/TR/xml-infoset。 InfoSet內容可能不是 相同的文本XML副本,因爲以下信息不保留爲 :無關緊要的空格,屬性順序, 命名空間前綴和XML聲明。

因此,內部存儲將刪除它認爲不必要的所有部分,文檔繼續聲明如果您需要XML文檔的精確副本而不僅僅是內容,則應該使用[n] varchar (最大值)或varbinary(最大)

相關問題