分页 存储过程

CREATE proc newgetpage
(--默认分页主键为id
 @tblName  nvarchar(128),  --表名称列表
 @PageSize  int=10,   --页尺寸
 @PageIndex   int=1,   --当前页
 @fields   nvarchar(4000)=‘*‘, --查询字段列表
 @fldname  nvarchar(50),  --主键字段名
 @fldorder  bit=1,   --主键排序方式,0asc,非零desc
 @FirstfldName  nvarchar(50)=‘‘,              --主排序字段名,非主键,有重复值
 @FirstfldOrder  bit=1,   --主字段排序方式
 @SecondfldName nvarchar(50)=‘‘,              --副排序字段名,非主键,有重复值
 @SecondfldOrder bit=1,   --副字段排序方式
 @strWhere  nvarchar(1000)=‘‘, --查询条件
 @Iscount  bit=0   --返回记录总数,非0则返回
)
as
declare @strsql   nvarchar(4000)  --主语句
declare @strtmp   nvarchar(500)  --临时变量
declare @strorder   nvarchar(500)  --总排序方式
declare @stropporder   nvarchar(500)  --总排序的反方式
declare @strorderfldlist  nvarchar(500)  --所有要排序的字段序列
declare @selectfld  nvarchar(500)  --选择主键page
declare @selectfirst  nvarchar(500)  --选择主排序page
declare @selectsecond  nvarchar(500)  --选择副排序page
/**/
declare @strwheretmp  nvarchar(500)  --临时where变量
if @strwhere!=‘‘
 set @strwheretmp=‘ where ‘
else
 set @strwheretmp=‘‘
/**/
set @strsql=‘‘
set @strtmp=‘‘
set @strorder=‘‘
set @stropporder=‘‘
set @strorderfldlist=‘‘
set @selectfld=‘‘
set @selectfirst=‘‘
set @selectsecond=‘‘
if @pagesize<1
 set @pagesize=10
if @pageindex<1
 set @pageindex=1
if @fields=‘‘
 set @fields=‘*‘
if @FirstfldName=‘‘
 set @FirstfldName=‘‘
if @SecondfldName=‘‘
 set @SecondfldName=‘‘

--------------------------------bengin
----------总排序方式
if @fldorder!=0
 begin
  -----正排序
  set @[email protected] + ‘ desc ‘
  if @secondfldname!=‘‘
   if @secondfldorder!=0
    set @[email protected] + ‘ desc,‘[email protected]
   else
    set @[email protected] + ‘ asc,‘[email protected]
  if @firstfldname!=‘‘
   if @firstfldorder!=0
    set @[email protected] + ‘ desc,‘[email protected]
   else
    set @[email protected] + ‘ asc,‘[email protected]
  -----反排序
  set @[email protected] + ‘ asc ‘
  if @secondfldname!=‘‘
   if @secondfldorder!=0
    set @[email protected] + ‘ asc,‘[email protected]
   else
    set @[email protected] + ‘ desc,‘[email protected]
  if @firstfldname!=‘‘
   if @firstfldorder!=0
    set @[email protected] + ‘ asc,‘[email protected]
   else
    set @[email protected] + ‘ desc,‘[email protected]
 end
else
 begin
  -----正排序
  set @[email protected] + ‘ asc ‘
  if @secondfldname!=‘‘
   if @secondfldorder!=0
    set @[email protected] + ‘ desc,‘[email protected]
   else
    set @[email protected] + ‘ asc,‘[email protected]
  if @firstfldname!=‘‘
   if @firstfldorder!=0
    set @[email protected] + ‘ desc,‘[email protected]
   else
    set @[email protected] + ‘ asc,‘[email protected]
  -----反排序
  set @[email protected] + ‘ desc ‘
  if @secondfldname!=‘‘
   if @secondfldorder!=0
    set @[email protected] + ‘ desc,‘[email protected]
   else
    set @[email protected] + ‘ asc,‘[email protected]
  if @firstfldname!=‘‘
   if @firstfldorder!=0
    set @[email protected] + ‘ desc,‘[email protected]
   else
    set @[email protected] + ‘ asc,‘[email protected]
 end
set @stropporder=‘ order by ‘[email protected]
set @strorder=‘ order by ‘[email protected] +‘ ‘
---------总排序方式end
---------总排序字段序列
set @strorderfldlist=‘id‘
if @firstfldname!=‘‘
 begin
 set @[email protected]+‘,‘[email protected]
 if @secondfldname!=‘‘
  set @[email protected]+‘,‘[email protected]
 end
---------总排序字段序列end
if @Firstfldname!=‘‘
-------若主排序字段不空,则按主排序字段排序,
 begin 
  if @fldorder!=0  
       set @strTmp = ‘<=(select top 1‘
  else
       set @strTmp = ‘>=(select top 1‘
  set @[email protected] + replace(@strtmp,‘=‘,‘‘)+‘(‘[email protected]+‘)from(select top ‘ + str((@PageIndex-1)*@PageSize)
   + ‘ ‘[email protected] +‘ from  ‘[email protected]+‘ ‘[email protected][email protected] [email protected]
   +‘)as tbltmp ‘+ @stropporder +‘)‘
  if @firstfldname!=‘‘
   set @selectfirst=‘ and ‘[email protected] + @strtmp+‘(‘[email protected]+‘)from(select top ‘ + str((@PageIndex-1)*@PageSize)
    + ‘ ‘[email protected] +‘ from  ‘[email protected]+‘ ‘[email protected][email protected] [email protected]
    +‘)as tbltmp ‘+ @stropporder +‘)‘
  if @secondfldname!=‘‘
   set @selectsecond=‘ and ‘[email protected] + @strtmp+‘(‘[email protected]+‘)from(select top ‘ + str((@PageIndex-1)*@PageSize)
    + ‘ ‘[email protected] +‘ from  ‘[email protected]+‘ ‘[email protected][email protected] [email protected]
    +‘)as tbltmp ‘+ @stropporder +‘)‘
  ------------多字段排序代码

set @strSQL = ‘select top ‘ + str(@PageSize) + ‘ ‘[email protected]+‘ from ‘
      + @tblName + ‘ where ‘ + @selectfld + @selectfirst+ @selectsecond+ @strOrder
 
  if @strWhere != ‘‘
      set @strSQL = ‘select top ‘ + str(@PageSize) + ‘ ‘[email protected]+‘ from ‘
          + @tblName + ‘ where ‘ + @selectfld + @selectfirst+ @selectsecond+‘ and ‘ + @strWhere + ‘ ‘ + @strOrder

------------多字段排序代码end
 end
-------若主排序字段不空,则按主排序字段排序,end
else
-------若主排序字段为空,则按主键排序,
 begin
  if charindex(‘.‘,@fldname)>0
   set @selectfld=substring(@fldname,charindex(‘.‘,@fldname)+1,len(@fldname))
  else
   set @[email protected]
  if @fldorder!=0  
   begin
       set @strTmp = ‘<(select top 1‘
       set @strOrder = ‘ order by ‘ + @fldName +‘ desc‘
       set @stropporder=‘ order by ‘[email protected] +‘ asc‘
   end
  else
   begin
       set @strTmp = ‘>(select top 1‘
       set @strOrder = ‘ order by ‘ + @fldName +‘ asc‘
       set @stropporder=‘ order by ‘[email protected] +‘ desc ‘
   end
  
  set @strSQL = ‘select top ‘ + str(@PageSize) + ‘ ‘[email protected]+‘ from ‘
   + @tblName + ‘ where ‘ + @fldName + ‘‘ + @strTmp + ‘(‘
   + @selectfld + ‘) from (select top ‘ + str((@PageIndex-1)*@PageSize) + ‘ ‘
   + @fldName + ‘ from ‘ + @tblName + ‘‘ + @strOrder + ‘) as tblTmp ‘[email protected] +‘)‘
   + @strOrder
  
  if @strWhere != ‘‘
   set @strSQL = ‘select top ‘ + str(@PageSize) + ‘ ‘[email protected]+‘ from ‘
           + @tblName + ‘ where ‘ + @fldName + ‘‘ + @strTmp + ‘(‘
           + @selectfld + ‘) from (select top ‘ + str((@PageIndex-1)*@PageSize) + ‘ ‘
           + @fldName + ‘ from ‘ + @tblName + ‘ where ‘ + @strWhere + ‘ ‘
           + @strOrder + ‘) as tblTmp ‘[email protected] +‘) and ‘ + @strWhere + ‘ ‘ + @strOrder
 end
-------若主排序字段为空,则按主键排序,end
if @PageIndex = 1
begin
    set @strTmp = ‘‘
    if @strWhere != ‘‘
        set @strTmp = ‘ where ‘ + @strWhere

set @strSQL = ‘select top ‘ + str(@PageSize) + ‘ ‘[email protected]+‘ from ‘
        + @tblName + ‘‘ + @strTmp + ‘ ‘ + @strOrder
end

if @IsCount != 0
begin
    set @strSQL = ‘select count(*) as Total from ‘ + @tblName + ‘‘
if @strWhere!=‘‘
    set @strSQL=‘select count(*) as Total from ‘[email protected] +‘ where ‘ [email protected]
end
--print @strsql
exec (@strSQL)
GO

时间: 2024-10-10 05:44:26

分页 存储过程的相关文章

SQL基础分页存储过程(案例一)

1 --分页 存储过程 案例 2 3 -- 所执行的存储过程 4 create proc pageForUsers 5 @currPage int, --当前页数 6 @pageSize int, --每页多少条记录 7 @count int output --总记录数 8 as 9 declare @firstIndex int 10 declare @lastIndex int 11 declare @sqlText varchar(200) 12 13 --统计总记录数 14 select

多表查询分页存储过程,解决了第二页不显示的问题

SET ANSI_NULLS OFFGOSET QUOTED_IDENTIFIER OFFGO ALTER PROCEDURE [dbo].[UP_Pagination]/****************************************************************** 千万数量级分页存储过程 *****************************************************************参数说明:1.Tables :表名称,视

oracle分页存储过程

oracle分页存储过程: CREATE OR REPLACE PROCEDURE FGK.prc_page (p_tableName in varchar2, --表名 p_strWhere in varchar2, --查询条件 p_orderColumn in varchar2, --排序的列 p_orderStyle in varchar2, --排序方式 p_curPage in out Number, --当前页 p_pageSize in out Number, --每页显示记录条

sql笔记/分页存储过程

[email protected]c#中进行++操作可以是整数或小数,sql中只能对整数进行++操作.char类型 适合存储长度波动较小不回收效率高varchar 类型 适合存储长度波动较大可以回收nchar代表unicode 存储内容包括汉字时候考虑加n SQL语句特点1不区分大小写2没有双引号所有字符串都包含在单引号3没有逻辑相等,逻辑相等和赋值一样都是用=4没有bool值得概念,但是在视图中可以输入true/false5也有关系运算符.6也有逻辑运算符 &&-- and || --o

sql server分页存储过程

/********************************************************************************* * Function: PagedProc                                                  * * Description: * * Sql2005分页存储过程                                              * * Finish DateT

[转]关于SQL分页存储过程的分析

[转]关于SQL分页存储过程的分析 建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页.但这种分页方法仅适用于较小数据量的情形,因为游标本身有缺点:游标是存放在内存中,很费内存.游标一建立,就将相关的记录锁住,直到取消游标.游标提供了对特定集合中逐行扫描的手段,一般使用游标来逐行遍历数据,根据取出数据条件的不同进行不同的操作.而对于多表和大表中定义的游标(大的数据集合

通用分页存储过程

/****** Object: StoredProcedure [dbo].[sp_CommonPaging] Script Date: 08/03/2015 21:06:14 ******/ --通用分页存储过程 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO Create PROCEDURE [dbo].[sp_CommonPaging] ( @tn nvarchar(30),--表名称 @idn nvarchar(20),--表主键名称 @

sql server 分页存储过程

随着信息时代的发展信息系统的使用越来越多,信息量越来越大:当信息量越来越大,这在数据 展示,特别是报表这块对系统展现效率要求越来越高,对于千万级数据量的展示必须得使用分页来展示. www.2cto.com If object_id('SP_Pagination')is not null drop proc SP_Pagination go Create PROCEDURE SP_Pagination /**//* *****************************************

真正通用的SQL分页存储过程

关于SQL分页的问题,网上找到的一些SQL其实不能真正做到通用,他们主要是以自增长ID做为前提的.但在实际使用中,很多表不是自增长的,而且主键也不止一个字段,其实我们稍做改进就可以达到通用.这里还增加了索引,以方便大数据量的使用(代码中是先抓到临时表的,从性能上说如果采用自增长式的ID表,当然可以不使用临时表以达到性能的提升).以下代码的SP是经过我们项目使用通过的.因朋友问及此问题,我就放在这里供大家分享,如各位大侠有更好的方法,也请告诉我.在这里先感谢各位了. 1 CREATE PROCED

分页存储过程

精确查询:         CREATE PROCEDURE FindCosInfo (     @CosID varchar (10),         //课程编号     @CosName  varchar (20),   //课程名称     @CosCredit  int                     //课程学分 ) AS declare @sql varchar (1000) begin   set @sql='select * from tb_Course '   if