2012-07-27 41 views
6

我想使用Xquery从XML获取属性值。如何使用Sql获取XML属性的值:xquery中的变量

我的XML是

<Answers> 
    <AnswerSet> 
    <Answer questionId="NodeID">155</Answer> 
    <Answer questionId="ParentNode" selectedValue="12">Product</Answer> 
    </AnswerSet> 
</Answers> 

下面是我的查询。

DECLARE @Field Varchar(100) 
DECLARE @Attribute VARCHAR(100) 
SET @Field='ParentNode' 
SET @Attribute = 'selectedValue' 

SELECT ISNULL(PropertyXML.value('(/Answers/AnswerSet/Answer[@questionId=sql:variable("@Field")])[1]','varchar(max)'),'') , 

ISNULL(PropertyXML.value( '(/答案/ AnswerSet /回答[@ questionId = SQL:可变( “@域”)]/SQL:可变(@Attribute))[1]',” VARCHAR(最大) '),'') 从节点 WHERE ID = 155

以下线路工作正常用sql:可变

ISNULL(PropertyXML.value('(/Answers/AnswerSet/Answer[@questionId=sql:variable("@Field")])[1]','varchar(max)'),'') 

但我在下面行收到错误..

ISNULL(PropertyXML.value('(/Answers/AnswerSet/Answer[@questionId=sql:variable("@Field")]/sql:variable(@Attribute))[1]','varchar(max)'),'') 

我想在结果中获得提供的属性(@Attribute)值。

+0

的SQL Server的什么版本?如果您使用.value,必须是2005+ – 2012-07-27 04:25:08

+0

是2005年和2008年 – Mohmedsadiq 2012-07-27 04:29:33

回答

2

试着这么做

ISNULL(@Xml.value('(/Answers/AnswerSet/Answer[@questionId=sql:variable("@Field")]/@*[local-name() = sql:variable("@Attribute")])[1]','varchar(max)'),'') 
+0

感谢您的帮助 – Mohmedsadiq 2012-07-27 05:06:47