2012-07-27 63 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