@linyouq 我的 SQL Server 版本: Microsoft SQL Server 2019 (RTM-CU12) (KB5004524) - 15.0.4153.1 (X64)
如果分页插件使用 DbType.SQL_SERVER
不添加 order by 会触发以下错误
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: SELECT id,code,name,del_flag FROM area_code WHERE del_flag IS NULL OFFSET ? ROWS FETCH NEXT ? ROWS ONLY
### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near 'OFFSET'.
; uncategorized SQLException; SQL state [S0001]; error code [102]; Incorrect syntax near 'OFFSET'.; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near 'OFFSET'.] with root cause
添加 order by 后可用
==> Preparing: SELECT id,code,name,del_flag FROM area_code WHERE del_flag IS NULL ORDER BY id ASC OFFSET ? ROWS FETCH NEXT ? ROWS ONLY
==> Parameters: 0(Long), 2(Long)
<== Columns: id, code, name, del_flag
<== Row: DEAEB43A-33C2-894C-AB97-0212F3DD6D5E, 310000, 浙江省, null
<== Row: 7E66D8E6-A2C2-C344-ABA2-D5AAA625D92C, 120000, 天津市, null
<== Total: 2
使用 DbType.SQL_SERVER2005 就没有问题
无论是否有 order by 都正常
有 order by
==> Preparing: WITH selectTemp AS (SELECT TOP 100 PERCENT ROW_NUMBER() OVER (ORDER BY id ASC) as __row_number__, id,code,name,del_flag FROM area_code WHERE del_flag IS NULL ORDER BY id ASC) SELECT * FROM selectTemp WHERE __row_number__ BETWEEN 1 AND 2 ORDER BY __row_number__
==> Parameters:
<== Columns: __row_number__, id, code, name, del_flag
<== Row: 1, DEAEB43A-33C2-894C-AB97-0212F3DD6D5E, 310000, 浙江省, null
<== Row: 2, 7E66D8E6-A2C2-C344-ABA2-D5AAA625D92C, 120000, 天津市, null
<== Total: 2
无 order by
==> Preparing: WITH selectTemp AS (SELECT TOP 100 PERCENT ROW_NUMBER() OVER (ORDER BY CURRENT_TIMESTAMP) as __row_number__, id,code,name,del_flag FROM area_code WHERE del_flag IS NULL) SELECT * FROM selectTemp WHERE __row_number__ BETWEEN 1 AND 2 ORDER BY __row_number__
==> Parameters:
<== Columns: __row_number__, id, code, name, del_flag
<== Row: 1, DEAEB43A-33C2-894C-AB97-0212F3DD6D5E, 310000, 浙江省, null
<== Row: 2, 7E66D8E6-A2C2-C344-ABA2-D5AAA625D92C, 120000, 天津市, null
<== Total: 2
总结如下:
不论SQL Server 版本是多少,尽量先不要使用 SQL Server 2012 提供的新分页,那个必须与 order by 组合使用,通用性较差。
如果非要使用 SQL Server 2012的新语法,保证代码中每个分页至少有一个 order by
4条答案
按热度按时间aiqt4smr1#
那是什么啊
gzszwxb42#
jdbc:microsoft:sqlserver: 是旧版的
jdbc:sqlserver: 是新版的。(至少我现在程序用的连接url是这个,然后用2012的分页)
30byixjq3#
@linyouq 我的 SQL Server 版本: Microsoft SQL Server 2019 (RTM-CU12) (KB5004524) - 15.0.4153.1 (X64)
如果分页插件使用
DbType.SQL_SERVER
不添加 order by 会触发以下错误
添加 order by 后可用
使用
DbType.SQL_SERVER2005
就没有问题无论是否有 order by 都正常
有 order by
无 order by
总结如下:
7tofc5zh4#
我是想说明我截图的那段代码是错误的。
至于@code-farmhand
问题不是使用SQL Server 2012 提供的新分页的时候会报错。必须与 order by 组合使用没毛病。
问题在于,
多数据源多类型数据库的时候。框架判断DbType 是 DbType.SQL_SERVER2005
不是哪个能用的问题。是判断的逻辑出错了。
单个数据数据源想用哪个就设置哪个。
多个不同类型数据源,SQL SERVER 数据源就要使用 DbType.SQL_SERVER 对应的分页 就只能重写相应代码。
或者有什么办法能直接指定不同数据源使用的分页方言?