2016-11-17 74 views
2

所有的價值,我想獲得元素價值的值時的名稱值org_id.This XML由外部過程放在數據庫中,我沒有控制權。 可能有多個ParematerValue節點,所以我不知道價值元素的位置時,名稱是org_Id.The唯一的保證是,有將只有一個元素名稱與價值org_id。XQuery來找到一個XML元素

在這種情況下,有沒有辦法找到的值?

示例XML(my_xml)

<ParameterValues> 
     <ParameterValue> 
      <Name>car_model</Name> 
      <Value>All</Value> 
     </ParameterValue> 
     <ParameterValue> 
      <Name>debug</Name> 
      <Value>0</Value> 
     </ParameterValue> 
     <ParameterValue> 
      <Name>org_Id</Name> 
      <Value>123456</Value> 
     </ParameterValue> 
    </ParameterValues> 

My XQuery 

    select 
     my_xml.value('(/ParameterValues/ParameterValue/Value)[3]','int') as org_wk 

    from 
     #test_xml 
    where 
     my_xml.exist('/ParameterValues/ParameterValue/Name[text() = "org_Id"]') = 1 

回答

3

這應該做的伎倆:

-- sample data 
CREATE TABLE #test_xml (my_xml XML); 
INSERT #test_xml 
VALUES 
('<ParameterValues> 
      <ParameterValue> 
       <Name>car_model</Name> 
       <Value>All</Value> 
      </ParameterValue> 
      <ParameterValue> 
       <Name>debug</Name> 
       <Value>0</Value> 
      </ParameterValue> 
      <ParameterValue> 
       <Name>org_Id</Name> 
       <Value>123456</Value> 
      </ParameterValue> 
     </ParameterValues>'); 

-- solution  
SELECT x2.p.value('(text())[1]', 'varchar(100)') 
FROM #test_xml x1 
CROSS APPLY x1.my_xml.nodes('//ParameterValue[Name="org_Id"]/Value') x2(p); 
+0

真棒,就像一個charm.Thanks艾倫 –

+0

沒問題。很高興爲你工作。 –

+0

對於任何正在尋找常用Xquery方法(exists(),query(),value(),node())的體面解釋的人來說,這是一個非常好的方法https://www.simple-talk.com/SQL /學習-SQL服務器/的-XML的方法,在-SQL服務器/ –