2014-07-19 36 views
0

我試圖建立在XML列(SQL Server數據庫)有一個放慢參數MyBatis的SELECT查詢,並似乎無法弄清楚MyBatis的select語句不工作

這工作XML XPath查詢:

<select ...> 
    SELECT 
     wd.webform_data_xml.value('(/personalDetails//familyName/node())[1]', 'nvarchar(max)') as webform_data_xml, 
     wd.webform_data_version_no 
    FROM  webform_data_t wd 

,但是當我嘗試paramterize值作爲這樣的:

<select ...> 
    SELECT 
     wd.webform_data_xml.value('#questionXPath:VARCHAR#', 'nvarchar(max)') as webform_data_xml, 
     wd.webform_data_version_no 
    FROM  webform_data_t wd 

我得到一個不尋常的錯誤。有什麼建議麼?

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The index 1 is out of range. 
+0

哪裏可以找到#parameter:datatype#usage的例子? AFAIK有兩種可能的方式[定義MyBatis參數](http://stackoverflow.com/questions/11760074/mybatis-string-as-parameter) –

回答

0

我在使用名爲ibatis的舊版本時。順便說一下,我找到了一個解決方案。基本上使用一個SQL變量來設置elementName並以動態sql的形式執行。

<select id="getXMLData" parameterClass="java.lang.String" resultClass="java.lang.String"> 

    DECLARE @XMLPath varchar(500) 
    SET @XMLPath= #questionXPath:VARCHAR# --"parentNode[1]childNode[1]elementName[1]" 

    SET @SQL = 'select webform_data_xml.value(''' + @XMLPath+ ''', ''varchar(100)'')' 

    EXEC (@SQL) 

</select>