2012-04-03 20 views
3

データベースから取得したXMLには簡単な問題があります。XMLにSQLの値があるかどうかを確認する方法は?

<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> 

か、それは内部の値を持つ可能性を、言ったXMLノードが値を持っているかどうかを私は確認することができますどのようにこの

<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> 

のように次のように今、このXMLは、その内部に値を持つことはできません?注:値には英数字を使用できます。 SQL Serverを使用していると仮定すると、

答えて

4

、あなたはvalueを使用することができます。

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)') <> '' 

これだけ/root/aが値を持っている最初の行を示しています。 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

これをケースステートメント内で使用し、それをIS NOT NULLと比較できますか? – Nathan

+0

確かに、答えに加えた例 – Andomar

+0

人生節約。ありがとうございます:) +1 – Si8

0

質問がある場合は、どのように認識するために(と区別)空の文字列に「ヌル」-fieldsとフィールドを、あなたが考慮すべきですデータベーステーブルとエクスポートスクリプトの再設計:

1)データベーステーブルに "null"フィールドを導入する。

2)

  • フィールドが "ヌル" 値を持っている場合は、すべてでこのフィールドをエクスポートしません。

  • フィールドに空の文字列がある場合は、エクスポートします。今のようにエクスポートします。

関連する問題