我正在尝试使用参数在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.
答案 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>