Welcome 微信登录

首页 / 数据库 / MySQL / 三种SQL分页查询的存储过程

--根据MAX(MIN)ID CREATE PROC [dbo].[proc_select_id] @pageindex int=1,--当前页数 @pagesize int=10,--每页大小 @tablename VARCHAR(50)="",--表名 @fields VARCHAR(1000)="",--查询的字段集合 @keyid VARCHAR(50)="",--主键 @condition NVARCHAR(1000)="",--查询条件 @orderstr VARCHAR(500),--排序条件 @totalRecord BIGINT OUTPUT--总记录数 AS    IF ISNULL(@orderstr,N"")=N"" SET @orderstr=N" ORDER BY "+@keyid+N" DESC "    IF ISNULL(@fields,N"")=N"" SET @fields=N"*"    IF ISNULL(@condition,N"")=N"" SET @condition=N"1=1"    DECLARE @sql NVARCHAR(4000)     --IF(@totalRecord IS NULL)     --BEGIN         SET @sql=N"SELECT @totalRecord=COUNT(*)"            +N" FROM "+@tablename             +N" WHERE "+@condition         EXEC sp_executesql @sql,N"@totalRecord INT OUTPUT",@totalRecord OUTPUT    --END     IF(@pageindex=1)     BEGIN        SET @sql=N"SELECT TOP "+STR(@pagesize)+N" "+@fields+N" FROM "+@tablename+N" WHERE "+@condition+N" "+@orderstr         EXEC(@sql)     END    ELSE    BEGIN        DECLARE @operatestr CHAR(3),@comparestr CHAR(1)         SET @operatestr="MAX"        SET @comparestr=">"        IF(@orderstr<>""        BEGIN            IF(CHARINDEX("desc",LOWER(@orderstr))<>0)             BEGIN                SET @operatestr="MIN"                SET @comparestr="<"            END        END        SET @sql=N"SELECT top "+STR(@pagesize)+N" "+@fields+N" FROM "+@tablename+N" WHERE "+@keyid+@comparestr             +N"(SELECT "+@operatestr+N"("+@keyid+N") FROM "+@tablename+N" WHERE "+@keyid             +N" IN (SELECT TOP "+STR((@pageindex-1)*@pagesize)+N" "+@keyid+N" FROM "+@tablename+N" WHERE "            +@condition+N" "+@orderstr+N")) AND "+@condition+N" "+@orderstr         EXEC(@sql)     ENDGO     --根据ROW_NUMBER() OVER CREATE PROC [dbo].[proc_select_page_row] @pageindex INT=1,--当前页数 @pagesize INT=10,--每页大小 @tablename VARCHAR(50)="",--表名 @fields VARCHAR(1000)="*",--查询的字段集合 @keyid VARCHAR(50)="",--主键 @condition NVARCHAR(1000)="",--查询条件 @orderstr VARCHAR(500),--排序条件 @totalRecord BIGINT  OUTPUT--总记录数 AS    IF ISNULL(@orderstr,N"")=N"" SET @orderstr=N" ORDER BY "+@keyid+N" DESC "    IF ISNULL(@fields,N"")=N"" SET @fields=N"*"    IF ISNULL(@condition,N"")=N"" SET @condition=N"1=1"    DECLARE @sql NVARCHAR(4000) --  IF @totalRecord IS NULL --  BEGIN         SET @sql=N"SELECT @totalRecord=COUNT(*)"            +N" FROM "+@tablename             +N" WHERE "+@condition         EXEC sp_executesql @sql,N"@totalRecord bigint OUTPUT",@totalRecord OUTPUT--END     IF(@pageindex=1)     BEGIN        SET @sql=N"SELECT TOP "+STR(@pagesize)+N" "+@fields+N" FROM "+@tablename+N" WHERE "+@condition+N" "+@orderstr         EXEC(@sql)     END    ELSE    BEGIN        DECLARE @StartRecord INT        SET @StartRecord = (@pageindex-1)*@pagesize + 1         SET @sql=N"SELECT * FROM (SELECT ROW_NUMBER() OVER ("+ @orderstr +N") AS rowId,"+@fields+N" FROM "+ @tablename+N") AS T WHERE rowId>="+STR(@StartRecord)+N" and rowId<="+STR(@StartRecord + @pagesize - 1)         EXEC(@sql)     ENDGO     --根据TOP ID CREATE PROC [dbo].[proc_select_page_top] @pageindex INT=1,--当前页数 @pagesize INT=10,--每页大小 @tablename VARCHAR(50)="",--表名 @fields VARCHAR(1000)="",--查询的字段集合 @keyid VARCHAR(50)="",--主键 @condition NVARCHAR(1000)="",--查询条件 @orderstr VARCHAR(500),--排序条件 @totalRecord BIGINT OUTPUT--总记录数 AS    IF ISNULL(@orderstr,N"")=N"" SET @orderstr=N" ORDER BY "+@keyid+N" DESC "    IF ISNULL(@fields,N"")=N"" SET @fields=N"*"    IF ISNULL(@condition,N"")=N"" SET @condition=N"1=1"    DECLARE @sql NVARCHAR(4000)     --IF(@totalRecord IS NULL)     --BEGIN         SET @sql=N"SELECT @totalRecord=COUNT(*)"            +N" FROM "+@tablename             +N" WHERE "+@condition         EXEC sp_executesql @sql,N"@totalRecord INT OUTPUT",@totalRecord OUTPUT    --END     IF(@pageindex=1)     BEGIN        SET @sql=N"SELECT TOP "+STR(@pagesize)+N" "+@fields+N" FROM "+@tablename+N" WHERE "+@condition+N" "+@orderstr         EXEC(@sql)     END    ELSE    BEGIN        SET @sql=N"SELECT TOP "+STR(@pagesize)+N" "+@fields+N" FROM "+@tablename+N" WHERE  "+@keyid         +N" NOT IN(SELECT TOP "+STR((@pageindex-1)*@pagesize)+N" "+@keyid+N" FROM "        +@tablename+N" WHERE "+@condition+N" "+@orderstr+N") AND "+@condition+N" "+@orderstr         EXEC(@sql)     ENDGO在CentOS 6.0上安装Oracle 11g R2 (11.2.0.1)以及基本的配置Oracle 如何搜索当前用户下所有表里含某个值的字段?相关资讯      SQL 
  • SQL 新手指南  (09/10/2015 10:57:53)
  • SQL导入txt以及SQL中的时间格式操  (01/25/2015 11:35:04)
  • SQL 事务及实例演示  (08/12/2014 10:36:37)
  • SQL 中的正则函数  (06/28/2015 15:59:48)
  • SQL 集合(笔记)  (01/15/2015 20:19:06)
  • Oracle shell调用SQL操作DB  (02/03/2014 10:48:18)
本文评论 查看全部评论 (0)
表情: 姓名: 字数