sqlserver 分页

create PROCEDURE [dbo].[GetPageDataOutRowNumber]

(

@tn nvarchar(30),--表名称

@idn nvarchar(20),--表主键名称

@pi int = 1,--当前页数

@ps  int = 7,--每页大小

@wh nvarchar(255) = ‘‘,--wehre查询条件

@oby nvarchar(255) = ‘‘,--orderby 排序

@rc int output,--总行数(传出参数)

@pc int output--总页数(传出参数)

)

AS

DECLARE @sql NVARCHAR(225)=‘‘,@sqlCount NVARCHAR(225)=‘‘

--1.计算总行数和总页数

SET @sqlCount = ‘SELECT @rc=COUNT([‘[email protected]+‘]),@pc=CEILING((COUNT(‘[email protected]+‘)+0.0)/‘+ CAST(@ps AS VARCHAR)+‘) FROM ‘ + @tn

IF LEN(@wh)>1

    set @[email protected]+‘ WHERE ‘[email protected]

print @sqlCount

EXEC SP_EXECUTESQL @sqlCount,N‘@rc INT OUTPUT,@pc INT OUTPUT‘,@rc OUTPUT,@pc OUTPUT

--2.分页

--2.1如果是第一页,则直接查询

IF @pi = 1

BEGIN

    SET @sql=‘SELECT TOP ‘+str(@ps) +‘ * FROM ‘[email protected]

    IF LEN(@wh)>1

        set @[email protected]+‘ WHERE ‘[email protected]

    IF LEN(@oby)>1

            SET @[email protected]+‘ order by ‘ [email protected]

EXEC(@sql)

END

ELSE--2.2如果不是第一页,则拼接查询语句

BEGIN

    SET NOCOUNT ON

    SET @sql=‘SELECT * FROM (select row_number() over(order by ‘

    IF LEN(@oby)>1

        set @[email protected] + @oby+‘) as rowNum,* from ‘[email protected]

    else

        set @[email protected] + @idn+‘) as rowNum,* from ‘[email protected]

    IF LEN(@wh)>1

        set @[email protected]+‘ where ‘[email protected]

    set @[email protected]+‘)as temp where rowNum>‘+str(@ps * (@pi-1))+‘ and rowNum<=‘+str(@ps*@pi)

    print @sql

    EXEC(@sql)

    SET NOCOUNT OFF

END

--测试语句

declare @rc int,@pc int

exec [GetPageDataOutRowNumber] ‘Ams_Area‘,‘ar_id‘,2,5,‘‘,‘ ar_id desc‘,@rc output,@pc output

select @rc,@pc

时间: 2024-07-30 18:22:12

sqlserver 分页的相关文章

sqlserver分页;mysql分页;orcale分页 的sql 查询语句

1 一,sqlserver分页: 2 SELECT TOP (每页显示的数据条数) *FROM 表名 WHERE (ID NOT IN (SELECT TOP ((当前页码 -1)*每页显示的数据条数 -1) ID FROM 表名 AS 表名1_1 ORDER BY ID)) ORDER BY ID; 3 二:mysql分页 4 select * from 表名 where id limit((当前页码 -1)*每页显示的数据条数,当前页码 * 每页显示的数据条数); 5 三:orcale分页

sqlserver分页:mysql分页:orcale分页

一,sqlserver分页: SELECT   TOP (每页显示的数据条数) *FROM 表名 WHERE   (ID NOT IN (SELECT TOP ((当前页码 -1)*每页显示的数据条数 -1) ID FROM  表名 AS 表名1_1  ORDER BY ID)) ORDER BY ID; 二:mysql分页     select  * from 表名 where id limit((当前页码 -1)*每页显示的数据条数,当前页码 * 每页显示的数据条数); 三:orcale分页

SQLserver分页查询实例

Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询每页30条,查询第1500页(即第45001-45030条数据),字段ID聚集索引,YEAR无索引,Sqlserver版本:2008R2 第一种方案.最简单.普通的方法: SELECT TOP 30 * FROM ARTICLE WHERE ID NOT IN(SELECT TOP 45000 ID

SQLServer分页查询存储过程

项目中用到的SQLServer分页查询存储过程. [存储过程] create PROCEDURE prcPageResult -- 获得某一页的数据 -- @currPage int = 1,                         --当前页页码 (即Top currPage) @showColumn varchar(2000) = '*',           --需要得到的字段 (即 column1,column2,......) @strCondition varchar(200

sqlserver分页查询

SQL Server 2005引入的新方法. SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY keyField DESC) AS rowNum, * FROM tableName) AS t WHERE rowNum > start AND rowNum <= end 其中: keyField为表tableName的一个字段(最好是主键): tableName为查询的表名: DESC可以按需换为ASC: start为要取的结果集的起始记录 en

sqlserver 分页模糊查询

   积少成多 ----  仅以此致敬和我一样在慢慢前进的人儿 问题: 在sqlserver 进行模糊查询,出现问题 最初使用“concat”,进行拼串操作,如下所示: <select id = "queryCount" resultType="int" > select count(*) from t_user <where> <if test = "queryText!= null"> loginacct

四种方式实现SQLServer 分页查询

SQLServer 的数据分页: 假设现在有这样的一张表: CREATE TABLE test ( id int primary key not null identity, names varchar(20) ) 然后向里面插入大约1000条数据,进行分页测试假设页数是10,现在要拿出第5页的内容,查询语句如下: --10代表分页的大小 select top 10 * from test where id not in ( --40是这么计算出来的:10*(5-1) select top 40

高效的SQLSERVER分页查询的几种示例分析

Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询每页30条,查询第1500页(即第45001-45030条数据),字段ID聚集索引,YEAR无索引,Sqlserver版本:2008R2 第一种方案.最简单.普通的方法: 1 SELECT TOP 30 * FROM ARTICLE WHERE ID NOT IN(SELECT TOP 45000

高效的SQLSERVER分页查询(推荐)

Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询每页30条,查询第1500页(即第45001-45030条数据),字段ID聚集索引,YEAR无索引,Sqlserver版本:2008R2 第一种方案.最简单.普通的方法: 代码如下: [sql] view plaincopyprint? SELECT TOP 30 * FROM ARTICLE WH

SqlServer分页总结-摘抄

sqlserver2008不支持关键字limit ,所以它的分页sql查询语句将不能用mysql的方式进行,幸好sqlserver2008提供了top,rownumber等关键字,这样就能通过这几个关键字实现分页. 下面是本人在网上查阅到的几种查询脚本的写法: 几种sqlserver2008高效分页sql查询语句 top方案: sql code: select top 10 * from table1 where id not in(select top 开始的位置 id from table1