mybatis提示錯誤
### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 必須聲明表變量 "@P0"。 ; uncategorized SQLException for SQL []; SQL state [S0001]; error code [1087]; 必須聲明表變量 "@P0"。; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 必須聲明表變量 "@P0"。 at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:75) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:447)
原因是SQL語句中表名作為一個變量,必須寫成${tableName}, 而不是寫成#{tableName}作為一個參數。
<select id="queryList" resultType="Map" databaseId="sqlserver"> SELECT * FROM ( SELECT D.*, ROW_NUMBER () OVER (ORDER BY TmStamp DESC) RN FROM ${tableName} D ) T <if test="limit!=null and offset!=null"> WHERE RN<=#{limit}+#{offset} AND RN>#{offset} </if> </select>
修改后正常。
