2012-04-03 12 views
3

Ich habe ein einfaches Problem mit XML aus der Datenbank. Nun können diese XML keine Werte im Inneren haben, wie folgt:Wie überprüft man, ob XML in SQL einen Wert hat?

<TryXML xmlns=""> 
<TryXML_XML_VERSION>1.0</TryXML_XML_VERSION> 
<TITLE_DESC /> 
<ISCI_CODE /> 
<PRODUCT_DESC /> 
<PLAY_LENGTH /> 
<START_TIME /> 
<COMPRESSION_LEVEL_CODE /> 
<ENCODER_TYPE_DESC /> 
<OUTPUT_RATE /> 
<FRAME_RATE /> 
<FILE_NAME /> 
<FILE_SIZE /> 
<COPY_DATE /> 
<ADVERTISER /> 
<AGENCY_VENDOR /> 
</TryXML> 

oder es könnte Werte innen haben, wie diese

<TryXML xmlns=""> 
<TryXML_XML_VERSION>1.0</TryXML_XML_VERSION> 
<TITLE_DESC>asd</TITLE_DESC> 
<ISCI_CODE>asd</ISCI_CODE> 
<PRODUCT_DESC>sd</PRODUCT_DESC> 
<PLAY_LENGTH>asdklgh</PLAY_LENGTH> 
<START_TIME>sdghkl</START_TIME> 
<COMPRESSION_LEVEL_CODE /> 
<ENCODER_TYPE_DESC /> 
<OUTPUT_RATE /> 
<FRAME_RATE /> 
<FILE_NAME>sdfgjkl</FILE_NAME> 
<FILE_SIZE /> 
<COPY_DATE /> 
<ADVERTISER>sdfgklj</ADVERTISER> 
<AGENCY_VENDOR>sdfgjkl</AGENCY_VENDOR> 
</TryXML> 

Wie kann ich überprüfen, ob die genannten XML-Knoten Werte hat oder nicht ? HINWEIS: Die Werte können alphanumerisch sein.

Antwort

4

Sie verwenden SQL Server Unter der Annahme, können Sie value verwenden:

declare @t table (col1 xml) 
insert @t values ('<root><a>val</a></root>') 
insert @t values ('<root><a></a></root>') 
insert @t values ('<root><a/></root>') 
insert @t values ('<root></root>') 

select * 
from @t 
where col1.value('(/root/a)[1]','varchar(50)') <> '' 

Dies zeigt nur die erste Zeile, wo /root/a einen Wert hat. Wie im Kommentar angefordert ein Beispiel mit einem case:

select case 
     when col1.value('(/root/a)[1]','varchar(50)') is null then 'Null' 
     else 'Not Null' 
     end 
from @t 

Example at SE.Data.

+0

Kann ich dies in einer case-Anweisung verwenden und es mit IS NOT NULL vergleichen? – Nathan

+0

Sicher, Beispiel hinzugefügt zu beantworten – Andomar

+0

Lebensretter. Danke :) +1 – Si8

0

Wenn die Frage ist, wie man erkennen (und unterscheiden zwischen) „null“ -Felder und Felder mit leeren Zeichenfolgen, die Sie berücksichtigen sollten ein Redesign Ihrer Datenbanktabellen und des Export-Skripts:

1) Führen Sie "Null" -Felder in Ihre Datenbanktabelle (n) ein.

2)

  • Wenn ein Feld einen "Null" Wert hat, exportiert dieses Feld nicht überhaupt.

  • Wenn ein Feld eine leere Zeichenfolge hat, exportieren Sie es - so wie Sie es jetzt tun.

Verwandte Themen