子查询使用ROW_NUMBER函数,mybatisPlus分页的时候报错(数据库使用的sql server)

1,629 阅读1分钟

子查询使用ROW_NUMBER函数,然后分页就报错了,放在navicat工具中sql是可以执行的

原sql语句

SELECT * FROM ( SELECT TOP 100 TC.CUST_ID, TC.CUST_NO, TC.CUST_NAME, TC.BIRTHDAY, TC.CARD_TYPE, TC.CARD_TYPE_NAME, TFO.CARD_ID, TC.AGE, TC.CARD_VALID_DATE, TC.SEX, TC.COUNTRY, TD.TYPE_CONTENT AS COUNTRY_NAME, TC.VOC_TYPE_NAME, TC.MOBILE, TC.E_MAIL, TC.CUST_TYPE, TC.POST_ADDRESS, TC.CUST_SOURCE, TC.CUST_SOURCE_NAME, TC.RECOMMENDED, TC.SERVICE_MAN, PE.LOGIN_USER, TM.MANAGERNAME AS SERVICE_MAN_NAME, TC.STATUS, TC.STATUS_NAME , TC.IMAGEIDENTIFICATION, TFO.IMAGE2, TC.CONTACT_MAN, TC.LEGAL_MAN, TC.LEGAL_ADDRESS, TC.POST_CODE2, TC.MONEY_SOURCE_NAME, TC.HGTZR_BH, ROW_NUMBER ( ) OVER ( PARTITION BY TC.CUST_ID ORDER BY TC.CUST_ID ) AS CUST_COUNT FROM EFCRM..TCUSTOMERS TC LEFT JOIN TOPERATOR PE ON PE.OP_CODE = TC.SERVICE_MAN LEFT JOIN EFCRM..TCUSTCARDINFO TFO ON TC.CUST_ID = TFO.CUST_ID AND TFO.CARD_TYPE = '110801', TDICTPARAM TD, EFCRM..TCUSTMANAGERS TM WHERE TC.SERVICE_MAN = TM.MANAGERID AND TD.TYPE_ID = 9997 AND TD.TYPE_VALUE = TC.COUNTRY ) CUSTDATA 重现步骤(如果有就写完整) 报错信息

org.springframework.jdbc.UncategorizedSQLException: Error querying database. Cause: java.sql.SQLException: sql injection violation, syntax error: TODO. pos 518, line 13, column 35, token AS :

WITH selectTemp AS (SELECT TOP 100 PERCENT ROW_NUMBER() OVER (ORDER BY TC.CUST_ID ) AS CUST_COUNT FROM EFCRM..TCUSTOMERS TC LEFT JOIN TOPERATOR PE ON PE.OP_CODE = TC.SERVICE_MAN, EFCRM..TCUSTMANAGERS TM,EFCRM..TCUSTCARDINFO TFO, TDICTPARAM TD

WHERE
    TC.SERVICE_MAN = TM.MANAGERID
    AND TD.TYPE_ID = 9997
    AND TD.TYPE_VALUE = TC.COUNTRY
    AND TC.CUST_ID = TFO.CUST_ID
 
    AND TC.CUST_TYPE = ?) as __row_number__,  TC.CUST_ID,
    TC.CUST_NO,
    TC.CUST_NAME,
    TC.BIRTHDAY,
    TC.CARD_TYPE,
    TC.CARD_TYPE_NAME,
    TC.CARD_ID,TC.AGE,
    TC.CARD_VALID_DATE,
    TC.SEX,
    TC.COUNTRY,
    TD.TYPE_CONTENT AS COUNTRY_NAME,
    TC.VOC_TYPE_NAME,
    TC.MOBILE,
    TC.E_MAIL,
    TC.CUST_TYPE,
    TC.POST_ADDRESS,
    TC.CUST_SOURCE,
    TC.CUST_SOURCE_NAME,
    TC.RECOMMENDED,
    TC.SERVICE_MAN,PE.LOGIN_USER,
    TM.MANAGERNAME AS SERVICE_MAN_NAME,
    TC.STATUS,
    TC.STATUS_NAME ,
    TC.IMAGEIDENTIFICATION,TFO.IMAGE2,
    TC.CONTACT_MAN,
    TC.LEGAL_MAN,
    TC.LEGAL_ADDRESS,
    TC.POST_CODE2,
    TC.MONEY_SOURCE_NAME,
    TC.HGTZR_BH,ROW_NUMBER ( ) OVER ( PARTITION BY TC.CUST_ID ORDER BY TC.CUST_ID ) AS CUST_COUNT
FROM
    EFCRM..TCUSTOMERS TC LEFT JOIN TOPERATOR PE ON PE.OP_CODE = TC.SERVICE_MAN,
    EFCRM..TCUSTMANAGERS TM,EFCRM..TCUSTCARDINFO TFO,
    TDICTPARAM TD
 
WHERE
    TC.SERVICE_MAN = TM.MANAGERID
    AND TD.TYPE_ID = 9997
    AND TD.TYPE_VALUE = TC.COUNTRY
    AND TC.CUST_ID = TFO.CUST_ID
 
    AND TC.CUST_TYPE = ?) SELECT * FROM selectTemp WHERE __row_number__ BETWEEN 1 AND 5 ORDER BY __row_number__

这个是后台打印的报错sql语句。我看默认是使用ROW_NUMBER 进行排序,然后再进行分页。但是不知道为什么我子查询里面 ROW_NUMBER,会影响到分页。打印出来的sql也不对。 我目前是想子查询使用ROW_NUMBER,排除掉重复的数据行,但是好像分页不兼容这样。

分页使用的是框架自带的写法