如何使用Sql获取XML属性的值:xquery中的变量

时间:2012-07-27 04:21:53

标签: sql sql-server tsql xquery-sql

我想使用Xquery从XML获取属性值。

我的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('(/ Answers / AnswerSet / Answer [@ questionId = sql:variable(“@ Field”)] / sql:variable(@Attribute))[1]','varchar(max) '),'')       FROM节点      WHERE id = 155

下面的行与sql:variable

一起正常工作
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)值。

1 个答案:

答案 0 :(得分:2)

尝试类似

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