2017-08-24 89 views
1

我正在测试这个简单的脚本,只是想知道为什么它不起作用。从XML节点提取数据

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

你只是根本无视这是你的<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 
+0

预期输出谢谢! ...我不知道我需要将NameSpace添加到我的脚本中。它现在有效。 – user3015739