用于XML xpath查询的Mybatis SELECT语句不起作用

时间:2014-07-19 14:45:58

标签: java sql mybatis

我正在尝试使用参数在XML列(SQL Server数据库)上构建myBatis SELECT查询,但似乎无法弄清楚

这有效:

<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 

但是当我尝试将Value重新定义为:

<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.

1 个答案:

答案 0 :(得分: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>