从XML节点中提取数据

时间:2017-08-24 04:20:10

标签: sql sql-server xml sql-server-2012 xml-parsing

我正在测试这个简单的脚本,只是想知道为什么它没有用。

DECLARE @myDoc xml  
DECLARE @ProdID int  

SET @myDoc = 
    '<Datatype xmlns="V8_0_1" id="113" name="PF_CleaningMode" hdl="47/4/SB8_3-910-8243-19/0/113" odobjid="915">
         <Datatypevalue id="2" name="Intermittent" />
         <Datatypevalue id="1" name="Continuous" />
         <Datatypevalue id="0" name="Off" />
     </Datatype>'  

SET @ProdID =  @myDoc.value('(Datatype/@id)[1]', 'int' )  
SELECT @ProdID  

希望你能提供帮助。感谢。

1 个答案:

答案 0 :(得分:1)

您只是完全忽略<Datatype>节点上定义的默认XML命名空间:

<Datatype xmlns="V8_0_1" id="113" name="PF_CleaningMode" 
          **************

您需要在查询中包含该内容!

像这样:

;WITH XMLNAMESPACES(DEFAULT 'V8_0_1')
SELECT  @myDoc.value('(Datatype/@id)[1]', 'INT')  

并且您将获得

的预期输出
113