sql语句是通用的
select * from mytable1 where 1 order by id desc limit 0,10
作用是倒序,取最前10条记录,也就是第一页
取第二页可以是这样的limit 10,10
自已修改着用吧
‘贰’ 请问,如何用一条SQL查询出分页的数据和总记录数啊MySQL的!不用存储
的确要查询两次的,因为计算总记录数是使用的聚合函数count(),如果你想一起查询出来,就要使用分组,那样也麻烦,对数据库的操作要使用细粒度的操作,可以使用事务来控制两次查询,用同一个connection,这样可以避免两次查询导致两次不同进程之间的连接操作
‘叁’ 用SQL语句怎么实现数据库分页
CREATE
PROC
sp_PageView
@tbname
sysname,
--要分页显示的表名
@FieldKey
nvarchar(1000),
--用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段
@PageCurrent
int=1,
--要显示的页码
@PageSize
int=10,
--每页的大小(记录数)
@FieldShow
nvarchar(1000)='',
--以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段
@FieldOrder
nvarchar(1000)='',
--以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC用于指定排序顺序
@Where
nvarchar(1000)='',
--查询条件
@PageCount
int
OUTPUT
--总页数
AS
SET
NOCOUNT
ON
--检查对象是否有效
IF
OBJECT_ID(@tbname)
IS
NULL
BEGIN
RAISERROR(N'对象"%s"不存在',1,16,@tbname)
RETURN
END
IF
OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTable')=0
AND
OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsView')=0
AND
OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTableFunction')=0
BEGIN
RAISERROR(N'"%s"不是表、视图或者表值函数',1,16,@tbname)
RETURN
END
--分页字段检查
IF
ISNULL(@FieldKey,N'')=''
BEGIN
RAISERROR(N'分页处理需要主键(或者惟一键)',1,16)
RETURN
END
--其他参数检查及规范
IF
ISNULL(@PageCurrent,0)<1
SET
@PageCurrent=1
IF
ISNULL(@PageSize,0)<1
SET
@PageSize=10
IF
ISNULL(@FieldShow,N'')=N''
SET
@FieldShow=N'*'
IF
ISNULL(@FieldOrder,N'')=N''
SET
@FieldOrder=N''
ELSE
SET
@FieldOrder=N'ORDER
BY
'+LTRIM(@FieldOrder)
IF
ISNULL(@Where,N'')=N''
SET
@Where=N''
ELSE
SET
@Where=N'WHERE
('+@Where+N')'
--如果@PageCount为NULL值,则计算总页数(这样设计可以只在第一次计算总页数,以后调用时,把总页数传回给存储过程,避免再次计算总页数,对于不想计算总页数的处理而言,可以给@PageCount赋值)
IF
@PageCount
IS
NULL
BEGIN
DECLARE
@sql
nvarchar(4000)
SET
@sql=N'SELECT
@PageCount=COUNT(*)'
+N'
FROM
'+@tbname
+N'
'+@Where
EXEC
sp_executesql
@sql,N'@PageCount
int
OUTPUT',@PageCount
OUTPUT
SET
@PageCount=(@PageCount+@PageSize-1)/@PageSize
END
--计算分页显示的TOPN值
DECLARE
@TopN
varchar(20),@TopN1
varchar(20)
SELECT
@TopN=@PageSize,
@TopN1=@PageCurrent*@PageSize
--第一页直接显示
IF
@PageCurrent=1
EXEC(N'SELECT
TOP
'+@TopN
+N'
'+@FieldShow
+N'
FROM
'+@tbname
+N'
'+@Where
+N'
'+@FieldOrder)
ELSE
BEGIN
--生成主键(惟一键)处理条件
DECLARE
@Where1
nvarchar(4000),@s
nvarchar(1000)
SELECT
@Where1=N'',@s=@FieldKey
WHILE
CHARINDEX(N',',@s)>0
SELECT
@s=STUFF(@s,1,CHARINDEX(N',',@s),N''),
@Where1=@Where1
+N'
AND
a.'+LEFT(@s,CHARINDEX(N',',@s)-1)
+N'='+LEFT(@s,CHARINDEX(N',',@s)-1)
SELECT
@Where1=STUFF(@Where1+N'
AND
a.'+@s+N'='+@s,1,5,N''),
@TopN=@TopN1-@PageSize
--执行查询
EXEC(N'SET
ROWCOUNT
'+@TopN1
+N'
SELECT
'+@FieldKey
+N'
INTO
#
FROM
'+@tbname
+N'
'+@Where
+N'
'+@FieldOrder
+N'
SET
ROWCOUNT
'+@TopN
+N'
DELETE
FROM
#'
+N'
SELECT
'+@FieldShow
+N'
FROM
'+@tbname
+N'
a
WHERE
EXISTS(SELECT
*
FROM
#
WHERE
'+@Where1
+N')
'+@FieldOrder)
END
‘肆’ SQL Server数据库用sql语句实现分页查询 (从M条数据开始,查找N条记录。sqlserver数据库。请举例说明。)
1:新建一个数据库
create database 数据库名
2:新建一个表
create table 表名
(
字段名 类型 是否为空
)
3:删除一个表
drop table 表名
4:增加一个记录
insert 表名 [(字段)] values ( 内容 )
5:删除一个记录
delete [from] 表名 where 条件
6、修改一个记录
update 表名 set 字段名=更新内容 where 条件
7、在原表中增加一个字段
alter table 表名 add column 字段名 类型
8:在原表中删除一个字段
alter table 表名 drop column 字段名
9、查询一个表记录
select * from 表名
10、带条件查询一个表记录
select * from 表名 where =条件
‘伍’ 如何使用sql语句进行分页操作
sql语句是不能进行分页操作的,它只查出一个相应条件的数据记录集。而分页操作,是由程序员用相应的软件开发语言设计算法,而过进行分页操作。谢谢
‘陆’ sql语句查询加分页
你的意思是前五行是固定的,后十行进行分页是么,前五行固定写死,后十行用参数或动态sql来进行分页。例如第一页:
select top 5 id,readcount,weight from table1 order by readcount desc
union all
select top 10,id,readcount,weight from table1 order by weight desc --这句进行动态sql或传参数进行分页,网上分页的sql很多。有问题再追问。
‘柒’ 如何用sql语句 实现分页查询
适用于 SQL Server 2000/2005
SELECT TOP 页大小 *
FROM table1
WHERE id NOT IN
SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id
‘捌’ SQL如何实现数据分页,要具体语句,谢谢
可以的,用存储过程
分页存储过程如下
CREATE PROCEDURE GetRecordFromPage
@tblName varchar(255), -- 表名
@RetColumns varchar(1000) = '*', -- 需要返回的列,默认为全部
@Orderfld varchar(255), -- 排序字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@IsCount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType varchar(50) = 'asc', -- 设置排序类型, 非 asc 值则降序
@strWhere varchar(1000) = '' -- 查询条件 (注意: 不要加 where)
AS
declare @strSQL varchar(1000) -- 主语句
declare @strTmp varchar(300) -- 临时变量
declare @strOrder varchar(400) -- 排序类型
if @IsCount != 0 --执行总数统计
begin
if @strWhere != ''
set @strSQL = "select count(*) as Total from [" + @tblName + "] where " + @strWhere
else
set @strSQL = "select count(*) as Total from [" + @tblName + "]"
end
else --执行查询操作
begin
if @OrderType != 'asc'
begin
set @strTmp = "<(select min"
set @strOrder = " order by [" + @Orderfld +"] desc"
end
else
begin
set @strTmp = ">(select max"
set @strOrder = " order by [" + @Orderfld +"] asc"
end
set @strSQL = "select top " + str(@PageSize) + " " + @RetColumns + " from ["
+ @tblName + "] where [" + @Orderfld + "]" + @strTmp + "(["
+ @Orderfld + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
+ @Orderfld + "] from [" + @tblName + "]" + @strOrder + ") as tblTmp)"
+ @strOrder
if @strWhere != ''
set @strSQL = "select top " + str(@PageSize) + " " + @RetColumns + " from ["
+ @tblName + "] where [" + @Orderfld + "]" + @strTmp + "(["
+ @Orderfld + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
+ @Orderfld + "] from [" + @tblName + "] where (" + @strWhere + ") "
+ @strOrder + ") as tblTmp) and (" + @strWhere + ") " + @strOrder
if @PageIndex = 1
begin
set @strTmp = ""
if @strWhere != ''
set @strTmp = " where (" + @strWhere + ")"
set @strSQL = "select top " + str(@PageSize) + " " + @RetColumns + " from ["
+ @tblName + "]" + @strTmp + " " + @strOrder
end
end
exec (@strSQL)
‘玖’ 如何通过执行动态sql获取分页需要的总记录数
�衷诘奈侍饩凸榻嵩谡饷窗鸦袢∽芗锹挤祷氐酱娲⒐�痰氖涑霾问�小O衷诩虻ヌ�隹突П斫峁梗� 接着贴出我的存储过程: Create proc [dbo].[Get_Customer] @type varchar(1000), @pageIndex int, @pageSize int, @RecordCount int outputasdeclare @beginIndex int declare @endIndex int declare @sql Nvarchar(max)注意这里定义的是Unicode变量 set @beginIndex=(@pageIndex-1)*@pageSize+1 set @endIndex=@pageIndex*@pageSize set @sql=' IF OBJECT_ID(''tempdb..#temp'') IS NOT NULL DROP TABLE #temp select ROW_NUMBER() over (order by c.Id) as id,CustomNO,Name,Phone,Email,Type into #temp from Customer ' if(@type is not null) set @sql=@sql+'where type='''+@type+'' set @sql=@sql+' select @p=COUNT(*) from #temp select * from #temp where #temp.rowNum between ' + cast(@beginIndex as varchar(10))+' and '+ cast(@endIndex as varchar(10)) --使用EXECUTE直接执行获取不到总记录数 --EXECUTE (@sql) --使用EXECUTE执行sp_executesql存储过程才能获取到EXECUTE sp_executesql @sql,N'@p AS INT OUTPUT',@p=@RecordCount Output 其实以上两种执行的方式差别就是:一种是执行一个动态的批处理,另一种是执行一个存储过程 sp_executesql命令,因为它提供一个接口,该接口及支持输入参数也支持输出参数。这功能使你可以创建带参数的查询字符串,这样就可以比EXEC更好的重用执行计划,sp_executesql的构成与存储过程非常相似,不同之处在于你是动态构建代码。通过上面的列子的话可以看见直接执行批处理时获取不到动态语句里面的总记录数的。 构造动态sql的where子句,也就是条件子句时,exec无法使用变量来进行占位,需要将变量转换成字符串,然后和动态sql进行拼接,这就可能引起Sql注入问题,而通过sp_executesql就不会有这个问题 比如上面的存储过程可以按一下方式修改执行修改一: set @sql=@sql+'where type='''+@type+''改为: set @sql=@sql+'where type=@typ' 修改二 --使用EXECUTE执行sp_executesql存储过程才能获取到 EXECUTE sp_executesql @sql,N'@p AS INT OUTPUT',@p=@RecordCount Output 改为 --使用EXECUTE执行sp_executesql存储过程才能获取到 EXECUTE sp_executesql @sql,N'@typ Nvarchar(50),@p AS INT OUTPUT',@typ=@type @p=@RecordCount Output 至于sp_executesql更详细的语法及使用方式请参考其它资料,或者直接打开数据库然后按F1寻求帮助 嘿嘿!! ,本站保留追究责任的权利。
‘拾’ 一条sql语句实现分页查询,且能返回记录总数
select *,(select count(*) from t1) from(
select top 2 * from(
select top 4 * from(
select * from t1
)as ttb0 order by id
)as ttb1 order by id desc
)as ttb2 order by id
在select后加个子查询就OK了,