!10 sqlserver兼容性优化

Merge pull request !10 from diantu/master
This commit is contained in:
暮光:城中城
2023-01-18 04:03:31 +00:00
committed by Gitee
3 changed files with 39 additions and 18 deletions

View File

@@ -46,7 +46,7 @@
SELECT ( SELECT (
SELECT IS_IDENTITY FROM ${dbName}.SYS.ALL_COLUMNS SELECT IS_IDENTITY FROM ${dbName}.SYS.ALL_COLUMNS
WHERE ${dbName}.SYS.ALL_COLUMNS.NAME=SYSCOLUMNS.NAME AND OBJECT_ID = OBJECT_ID('${dbName}..${tableName}') 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 SYSCOLUMNS.LENGTH length,PRIMARYINFO.ISPRAMARY primaryKey
FROM ${dbName}..SYSCOLUMNS FROM ${dbName}..SYSCOLUMNS
LEFT JOIN PRIMARYINFO ON PRIMARYINFO.COLUMNNAME=NAME LEFT JOIN PRIMARYINFO ON PRIMARYINFO.COLUMNNAME=NAME

View File

@@ -48,8 +48,8 @@ public class OracleServiceImpl extends DbBaseService {
} }
StringBuilder sqlSbFinal = new StringBuilder(); StringBuilder sqlSbFinal = new StringBuilder();
Integer pageSize = dataViewParam.getPageSize() * dataViewParam.getPageNum(); Integer pageSize = dataViewParam.getPageSize() * dataViewParam.getPageNum();
Integer offsetSize = dataViewParam.getPageSize() * (dataViewParam.getPageNum() - 1) + 1; 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 >=" + offsetSize)); 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(); return sqlSbFinal.toString();
} }
} }

View File

@@ -22,15 +22,15 @@ import java.util.stream.Collectors;
*/ */
@Service @Service
public class SqlserverServiceImpl extends DbBaseService { public class SqlserverServiceImpl extends DbBaseService {
@Resource @Resource
SqlserverDownloadService sqlserverDownloadService; SqlserverDownloadService sqlserverDownloadService;
@Override @Override
public DatabaseProductEnum getDatabaseProduct() { public DatabaseProductEnum getDatabaseProduct() {
return DatabaseProductEnum.SQLSERVER; return DatabaseProductEnum.SQLSERVER;
} }
@Override @Override
public TableColumnVo getTableColumnList(Long sourceId, String dbName, String tableName) { public TableColumnVo getTableColumnList(Long sourceId, String dbName, String tableName) {
TableColumnVo tableColumnVo = super.getTableColumnList(sourceId, dbName, tableName); TableColumnVo tableColumnVo = super.getTableColumnList(sourceId, dbName, tableName);
@@ -47,29 +47,50 @@ public class SqlserverServiceImpl extends DbBaseService {
} }
return tableColumnVo; 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 * @return 分页查询的SQL
* @author 暮光:城中城 * @author diantu
* @since 2021年6月13 * @since 2023年1月18
*/ */
@Override @Override
public String getQueryPageSql(DataViewParam dataViewParam) { public String getQueryPageSql(DataViewParam dataViewParam) {
String queryColumns = StringUtils.defaultIfBlank(dataViewParam.getRetainColumn(), "*"); String queryColumns = StringUtils.defaultIfBlank(dataViewParam.getRetainColumn(), "*");
Integer pageNum = dataViewParam.getPageNum();
Integer pageSize = dataViewParam.getPageSize();
Integer rownumber = (pageNum-1)*pageSize;
StringBuilder sqlSb = new StringBuilder(); 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())) { 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(); return sqlSb.toString();
} }
/** /**
* 获取查询总条数的SQL * 获取查询总条数的SQL
* *
@@ -85,7 +106,7 @@ public class SqlserverServiceImpl extends DbBaseService {
} }
return sqlSb.toString(); return sqlSb.toString();
} }
/** /**
* 获取全量数据查询的SQL * 获取全量数据查询的SQL
* *