2017-01-13 4 views
1

次のXMLクエリが結果を取得しない理由をお知らせください。 値EffectiveUserNameタグを取得しようとしています。xml列のノード値を取得する

DECLARE @MyXML XML 
     SET @MyXML = '<PropertyList xmlns="urn:schemas-microsoft-com:xml-analysis" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
     <Catalog>name</Catalog> 
     <Timeout>600</Timeout> 
     <Format>Native</Format> 
     <DbpropMsmdFlattened2>false</DbpropMsmdFlattened2> 
     <Cube>Model</Cube> 
     <DbpropMsmdOptimizeResponse>1</DbpropMsmdOptimizeResponse> 
     <DbpropMsmdActivityID>68A6900B-20F8-4A02-AEC3-7C56B2D3C5D5</DbpropMsmdActivityID> 
     <DbpropMsmdRequestID>A0D1E07F-AE29-4CCA-AEE4-3B79D97CA426</DbpropMsmdRequestID> 
     <DbpropMsmdCurrentActivityID>68A6900B-20F8-4A02-AEC3-7C56B2D3C5D5</DbpropMsmdCurrentActivityID> 
     <LocaleIdentifier>1033</LocaleIdentifier> 
     <EffectiveUserName>[email protected]</EffectiveUserName> 
     <sspropinitappname>PowerBI</sspropinitappname> 
    </PropertyList>' 


    select @MyXML.value('(/PropertyList/EffectiveUserName)[1]','varchar(max)') 

答えて

2

あなたのXMLは、あなたが尊重し、あなたのクエリに含まれている必要がありデフォルトの名前空間を持っています!

<PropertyList xmlns="urn:schemas-microsoft-com:xml-analysis" 
       *********************************************** 
       xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 

あなたのクエリのデフォルト XML名前空間を定義することによって、探している値を取得するために、このコードを使用します。

;WITH XMLNAMESPACES(DEFAULT 'urn:schemas-microsoft-com:xml-analysis') 
SELECT 
    @MyXML.value('(/PropertyList/EffectiveUserName)[1]', 'varchar(50)') 
+0

MyXML.value @選択します( '(/ *:のpropertylist/*:EffectiveUserName)[1]'、 'varchar型(最大)') –

+2

@ShivaKumar明らかにあなた名前空間にワイルドカードを使用するというAducciの助言に従った。それは問題ありませんが、possilbeほど具体的である方が良いということを認識しておく必要があります。そして私に1つのヒントを許してください:答えの1つがあなたの問題を解決するなら、答えの投票カウンタの下にある受諾チェックにチェックを入れてください。これは、1)この問題を解決済みとマークします。2)最良の解決策を見つけるのをより簡単にします。3)回答者にポイントを払います。あなた自身が15ポイントの国境を越えたら、さらにあなたは貢献に投票するように求められます。これは、ありがとうと言います。乾杯 – Shnugo

2

あなたがタグ名の前*:を使用して名前空間を無視することができます:

select @MyXML.value('(/*:PropertyList/*:EffectiveUserName)[1]','varchar(max)') 
+0

これは動作しますが、一般的なヒントとしては示唆すべきではありません。一般的には、できるだけ具体的にするために、XMLを使用するのが最良です(最も速く、最も安全です)... – Shnugo

関連する問題