From e4920791b7fd04b3c7e33869194be903ec801330 Mon Sep 17 00:00:00 2001 From: diantu Date: Wed, 18 Jan 2023 11:40:47 +0800 Subject: [PATCH] =?UTF-8?q?sqlserver=E5=85=BC=E5=AE=B9=E6=80=A7=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/sqlserver/SqlServerBaseMapper.xml | 2 +- .../service/database/OracleServiceImpl.java | 4 +- .../database/SqlserverServiceImpl.java | 51 +++++++++++++------ 3 files changed, 39 insertions(+), 18 deletions(-) diff --git a/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/db/mapper/sqlserver/SqlServerBaseMapper.xml b/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/db/mapper/sqlserver/SqlServerBaseMapper.xml index 5b6f970b..b7065a28 100644 --- a/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/db/mapper/sqlserver/SqlServerBaseMapper.xml +++ b/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/db/mapper/sqlserver/SqlServerBaseMapper.xml @@ -46,7 +46,7 @@ SELECT ( SELECT IS_IDENTITY FROM ${dbName}.SYS.ALL_COLUMNS WHERE ${dbName}.SYS.ALL_COLUMNS.NAME=SYSCOLUMNS.NAME AND OBJECT_ID = OBJECT_ID('${dbName}..${tableName}') - ) selfIncrement, SYSCOLUMNS.NAME name,SYSTYPES.NAME type,Iif(SYSCOLUMNS.ISNULLABLE=1,'1','0') nullable, + ) selfIncrement, SYSCOLUMNS.NAME name,SYSTYPES.NAME type,case SYSCOLUMNS.ISNULLABLE when 1 then '1' else '0' end as nullable, SYSCOLUMNS.LENGTH length,PRIMARYINFO.ISPRAMARY primaryKey FROM ${dbName}..SYSCOLUMNS LEFT JOIN PRIMARYINFO ON PRIMARYINFO.COLUMNNAME=NAME diff --git a/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/service/database/OracleServiceImpl.java b/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/service/database/OracleServiceImpl.java index 3b1ee6ec..d8414118 100644 --- a/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/service/database/OracleServiceImpl.java +++ b/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/service/database/OracleServiceImpl.java @@ -48,8 +48,8 @@ public class OracleServiceImpl extends DbBaseService { } StringBuilder sqlSbFinal = new StringBuilder(); Integer pageSize = dataViewParam.getPageSize() * dataViewParam.getPageNum(); - Integer offsetSize = dataViewParam.getPageSize() * (dataViewParam.getPageNum() - 1) + 1; - sqlSbFinal.append(String.format("select * from ( select %s from %s", queryColumns + ",rownum rn", "(" + sqlSb + ") where rownum<=" + pageSize + " ) t2 where t2.rn >=" + offsetSize)); + Integer pageNum = dataViewParam.getPageSize() * (dataViewParam.getPageNum() - 1) + 1; + sqlSbFinal.append(String.format("select * from ( select %s from %s", queryColumns + ",rownum rn", "(" + sqlSb + ") where rownum<=" + pageSize + " ) t2 where t2.rn >=" + pageNum)); return sqlSbFinal.toString(); } } diff --git a/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/service/database/SqlserverServiceImpl.java b/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/service/database/SqlserverServiceImpl.java index 4d92d651..5408ed0c 100644 --- a/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/service/database/SqlserverServiceImpl.java +++ b/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/service/database/SqlserverServiceImpl.java @@ -22,15 +22,15 @@ import java.util.stream.Collectors; */ @Service public class SqlserverServiceImpl extends DbBaseService { - + @Resource SqlserverDownloadService sqlserverDownloadService; - + @Override public DatabaseProductEnum getDatabaseProduct() { return DatabaseProductEnum.SQLSERVER; } - + @Override public TableColumnVo getTableColumnList(Long sourceId, String dbName, String tableName) { TableColumnVo tableColumnVo = super.getTableColumnList(sourceId, dbName, tableName); @@ -47,29 +47,50 @@ public class SqlserverServiceImpl extends DbBaseService { } return tableColumnVo; } - + +// /** +// * 获取分页查询的SQL(fetch next只适用SQL Server 2012及以上版本) +// * +// * @return 分页查询的SQL +// * @author 暮光:城中城 +// * @since 2021年6月13日 +// */ +// @Override +// public String getQueryPageSql(DataViewParam dataViewParam) { +// String queryColumns = StringUtils.defaultIfBlank(dataViewParam.getRetainColumn(), "*"); +// StringBuilder sqlSb = new StringBuilder(); +// sqlSb.append(String.format("select %s from %s..%s", queryColumns, dataViewParam.getDbName(), dataViewParam.getTableName())); +// if (StringUtils.isNotBlank(dataViewParam.getCondition())) { +// sqlSb.append(String.format(" where %s", dataViewParam.getCondition())); +// } +// if (StringUtils.isNotBlank(dataViewParam.getOrderColumn()) && StringUtils.isNotBlank(dataViewParam.getOrderType())) { +// sqlSb.append(String.format(" order by %s %s", dataViewParam.getOrderColumn(), dataViewParam.getOrderType())); +// } +// sqlSb.append(String.format(" offset %s row fetch next %s rows only", dataViewParam.getOffset(), dataViewParam.getPageSize())); +// return sqlSb.toString(); +// } + /** - * 获取分页查询的SQL + * 获取分页查询的SQL(兼容写法,支持SQL Server 2005及以上版本) * * @return 分页查询的SQL - * @author 暮光:城中城 - * @since 2021年6月13日 + * @author diantu + * @since 2023年1月18日 */ @Override public String getQueryPageSql(DataViewParam dataViewParam) { String queryColumns = StringUtils.defaultIfBlank(dataViewParam.getRetainColumn(), "*"); + Integer pageNum = dataViewParam.getPageNum(); + Integer pageSize = dataViewParam.getPageSize(); + Integer rownumber = (pageNum-1)*pageSize; StringBuilder sqlSb = new StringBuilder(); - sqlSb.append(String.format("select %s from %s..%s", queryColumns, dataViewParam.getDbName(), dataViewParam.getTableName())); + sqlSb.append(String.format("select top %s * from (select row_number() OVER(order by %s %s) as rowid, %s from %s..%s )A where rowid> %s",pageSize,dataViewParam.getOrderColumn(), dataViewParam.getOrderType(), queryColumns, dataViewParam.getDbName(), dataViewParam.getTableName(),rownumber)); if (StringUtils.isNotBlank(dataViewParam.getCondition())) { - sqlSb.append(String.format(" where %s", dataViewParam.getCondition())); + sqlSb.append(String.format(" and %s", dataViewParam.getCondition())); } - if (StringUtils.isNotBlank(dataViewParam.getOrderColumn()) && StringUtils.isNotBlank(dataViewParam.getOrderType())) { - sqlSb.append(String.format(" order by %s %s", dataViewParam.getOrderColumn(), dataViewParam.getOrderType())); - } - sqlSb.append(String.format(" offset %s row fetch next %s rows only", dataViewParam.getOffset(), dataViewParam.getPageSize())); return sqlSb.toString(); } - + /** * 获取查询总条数的SQL * @@ -85,7 +106,7 @@ public class SqlserverServiceImpl extends DbBaseService { } return sqlSb.toString(); } - + /** * 获取全量数据查询的SQL *