问题描述
- sql语句的问题 完成分页
-
rs=stmt.executeQuery("select top "+pageSize+" * from STUDENT where ID not in(select top "+pageSize* (pageNow-1)+" ID from STUDENT) ");
网上找的一个分页 但是这句话里 一直显示 未找到要求的 FROM 关键字 实在是不知道怎么回事儿了 求求求
解决方案
STUDENT 是表名 ID是主键
解决方案二:
把sql语句在数据库中运行一下,看看报的错,然后再改
解决方案三:
基于SQL语句的分页
SQL2000 分页查询语句
解决方案四:
你要是oracle数据库的话,是没有top的。
解决方案五:
sql的分页用存储过程写,这个很好用,我都是写的存储过程,或者分页用分页控件,网上有,很好用,更直接点如果你是.net的页面用LigerUI做分分钟搞定
/******************************
*
分页存储过程
*
*
******************************/
ALTER PROCEDURE [dbo].proc_DataPage, --表名称
@Fields VARCHAR(4000), --显示字段
@SqlCondition VARCHAR(4000), --查询条件 (不用加 where)
@OrderField VARCHAR(250), --排序字段 (ID DESC)
@PageSize INT, --显示记录数
@PageIndex INT --当前页
)
AS
BEGIN
DECLARE @SqlWhere VARCHAR(4000)
DECLARE @ExecuteSql VARCHAR(4000)
DECLARE @CountSql NVARCHAR(1000)
DECLARE @RecordCount INT --记录数
SET @SqlWhere = ''
IF(@SqlCondition!='')
SET @SqlWhere = ' WHERE ' + @SqlCondition
SET @CountSql = 'SELECT @RecordCount = COUNT(*) FROM '+@TableName+''+@SqlWhere
EXEC sp_executesql @CountSql,N'@RecordCount INT OUT',@RecordCount OUT
IF(@PageIndex=1)
BEGIN
set @ExecuteSql = 'SELECT TOP '+cast(@PageSize AS VARCHAR)+' '+@Fields+' FROM '+@TableName+''+@SqlWhere+' ORDER BY '+@OrderField
END
ELSE
BEGIN
set @ExecuteSql = 'SELECT * FROM (SELECT '+@Fields+' , ROW_NUMBER() OVER(ORDER BY '+@OrderField+') AS RowNumber FROM '+@TableName+''+@SqlWhere+') AS temp WHERE RowNumber BETWEEN ('+CAST(@PageIndex AS VARCHAR)+'-1)*'+CAST(@PageSize AS VARCHAR)+'+1 AND '+CAST(@PageIndex AS VARCHAR)+'* '+CAST(@PageSize AS VARCHAR) +' '
END
EXEC(@ExecuteSql)
SELECT @RecordCount AS RecordCount
END
解决方案六:
你得说明下是用的什么库,不同的库操作还是有区别的
解决方案七:
rs=stmt.executeQuery("select * from (SELECT , rownum as rn from STUDENT) rn > "+pageSize(pageNow-1)+" and rn <= "+pageSize*pageNow;
第一个*
要用具体的字段替换,否则多出一列rn
。