必须声明表变量 "@P0"

Posted 轻云悠然舞月光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了必须声明表变量 "@P0"相关的知识,希望对你有一定的参考价值。

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&lt;=#{limit}+#{offset} AND RN&gt;#{offset}
        </if>
    </select>

修改后正常。

以上是关于必须声明表变量 "@P0"的主要内容,如果未能解决你的问题,请参考以下文章

必须声明标量变量“@status”“用户定义的表类型”

表变量和错误“必须声明标量变量”

必须声明表变量“@temp”

SQL 错误 - 必须声明表变量“@tablename”

从 SQL 函数返回动态透视表的困难 - “必须声明表变量 xxx”

尝试在 SQL 中运行 UPDATE 语句时“必须声明标量变量”