2012-03-13 85 views
4

我嘗試實現下面的代碼。XQuery/XPath使用sql參數?

declare @para varchar(10) = 'b'; 
declare @x xml = ' 
<x> 
    <a>1111</a> 
    <b>2222</b> 
    <c>3333</c> 
</x>'; 
select @x.query('/x/sql:variable("@para")'); 

上面的代碼應該得到<b>2222</b>的節點。然而,收到以下錯誤

 
Msg 9335, Level 16, State 1, Line 8 
XQuery [query()]: The XQuery syntax '/function()' is not supported. 
+0

不能在SQL服務器使用XQuery家族,但不由地想:會不會'查詢(CONCAT( '/ X /',@para)) 「工作? – grtjn 2012-03-13 20:35:49

+0

@grtjn,在SQL服務器中查詢的正確語法是'@ x.query('concat(「/ x /」,sql:variable(「@ para」))')'。但是它將僅返回'/ x/b'的字符串。 – ca9163d9 2012-03-14 04:29:38

+0

Thnx,學到了新的東西.. – grtjn 2012-03-14 06:57:05

回答

8
declare @para varchar(10) = 'b'; 
declare @x xml = ' 
<x> 
    <a>1111</a> 
    <b>2222</b> 
    <c>3333</c> 
</x>'; 
select @x.query('/x/*[local-name()=sql:variable("@para")]');