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

Moh*_*diq 6 sql t-sql sql-server xquery-sql

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

我的XML是

<Answers>
  <AnswerSet>
    <Answer questionId="NodeID">155</Answer>
    <Answer questionId="ParentNode" selectedValue="12">Product</Answer>
  </AnswerSet>
</Answers>
Run Code Online (Sandbox Code Playgroud)

以下是我的查询.

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)'),'') ,
Run Code Online (Sandbox Code Playgroud)

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)'),'')
Run Code Online (Sandbox Code Playgroud)

但我在下面的行中得到错误..

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

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

Adr*_*der 2

尝试类似的东西

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