机票分页存储过程!

USE [FlightDB]
GO
/****** Object: StoredProcedure [dbo].[ProFlightPageList] Script Date: 2016/8/3 17:30:30 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--/********************参数说明*********************************************
[email protected] --要显示的表或多个表的连接
[email protected] --要查询出的字段列表,*表示全部字段
[email protected] --每页显示的记录个数
[email protected] --要显示那一页的记录
[email protected] --查询条件,不需where
[email protected] --用于排序的主键
[email protected] --用于排序,如:id desc (多个id desc,dt asc)
[email protected] --排序,1-顺序,2-倒序
[email protected] --查询到的总记录数
[email protected] --耗时测试时间差

--****************************************************************************/
ALTER PROCEDURE [dbo].[ProFlightPageList]
@TableName VARCHAR(max)= NULL,--表名称,或者是表连接字符串,多表连接例如:student as s inner join dwinfo as dw on s.dwbh=dw.bh
@SelectField VARCHAR(max)=NULL,--欲显示的列(多列用逗号分开),例如:id,name
@PageSize INT =10,--每页显示条数
@PageIndex INT=1,--记录开始数
@Where VARCHAR(max)=NULL,--查询条件,‘‘代表没有条件,单条件或者多条件,多条件例如:name=‘啊‘ and id=10
@StrOrder VARCHAR(max) =NULL,--排序列(多个排序列用逗号分开),例如:id desc,name as
@RecordCount INT OUTPUT, -- 返回记录总数
@PageCount int OUTPUT, --总页数
@UsedTime int OUTPUT --查询耗时,毫秒为单位
AS
BEGIN
SET NOCOUNT ON;
DECLARE @SqlQuery NVARCHAR(max);---查询列表
DECLARE @SQLRowCount NVARCHAR(MAX) -- 用于查询记录总数的语句
DECLARE @totalRecord INT;
DECLARE @timediff DATETIME

Begin Tran
SELECT @timediff=getdate()
--计算总记录数
IF ( @Where = ‘‘‘‘ OR @Where = ‘‘ OR @Where IS NULL )
SET @SQLRowCount = ‘select @totalRecord = count(*) from ‘ + @TableName
ELSE
SET @SQLRowCount = ‘select @totalRecord = count(*) from ‘ + @TableName + ‘ where ‘ + @Where

EXEC sp_executesql @SQLRowCount,N‘@totalRecord int OUTPUT‘,@RecordCount OUTPUT--计算总记录数

IF( @PageIndex = 1 OR @PageIndex = 0 OR @PageIndex < 0 )--查询第一页
BEGIN
IF( @Where IS NULL )--if(@Where=‘‘)

SET @SqlQuery=‘select top ‘ + CONVERT(VARCHAR, @PageSize)
+ ‘ row_number() over(order by ‘ + @StrOrder
+ ‘ ) as RowNumber,‘ + @SelectField + ‘ from ‘
+ @TableName;

ELSE

SET @SqlQuery=‘select top ‘ + CONVERT(VARCHAR, @PageSize)
+ ‘ row_number() over(order by ‘ + @StrOrder
+ ‘ ) as RowNumberx,‘ + @SelectField + ‘ from ‘
+ @TableName + ‘ where ‘ + @Where;

END
ELSE--查询其它页
BEGIN
IF( @Where IS NULL )--if(@Where=‘‘)
BEGIN
SET @SqlQuery=‘with cte as (select row_number() over(order by ‘
+ @StrOrder + ‘ ) as RowNumber,‘ + @SelectField
+ ‘ from ‘ + @TableName
+ ‘

)
select * from cte where RowNumber between ‘
+
CONVERT(VARCHAR, (@PageIndex-1)*@PageSize+1)
+ ‘ and ‘
+ CONVERT(VARCHAR, @PageIndex*@PageSize)
END
ELSE
BEGIN
SET @SqlQuery=‘with cte as ( select row_number() over(order by ‘
+ @StrOrder + ‘ ) as RowNumber,‘ + @SelectField
+ ‘ from ‘ + @TableName + ‘ where ‘ + @Where
+ ‘

)

select * from cte where RowNumber between ‘
+

CONVERT(VARCHAR, (@PageIndex-1)*@PageSize+1)
+ ‘ and ‘
+ CONVERT(VARCHAR, @PageIndex*@PageSize)
END
END
EXEC (@SqlQuery)

If @@Error <> 0
BEGIN
ROLLBACK Tran
RETURN -1
END
ELSE
BEGIN
COMMIT TRAN
SET @UsedTime = datediff(ms,@timediff,getdate())--耗时
SET @PageCount = (@[email protected]) / @PageSize --总页数
END
END

--USE [FlightDB]
--GO
--/****** Object: StoredProcedure [dbo].[ProFlightPageList] Script Date: 2016/2/23 13:29:29 ******/
--SET ANSI_NULLS ON
--GO
--SET QUOTED_IDENTIFIER ON
--GO
--/********************参数说明*********************************************
[email protected] --要显示的表或多个表的连接
[email protected] --要查询出的字段列表,*表示全部字段
[email protected] --每页显示的记录个数
[email protected] --要显示那一页的记录
[email protected] --查询条件,不需where
[email protected] --用于排序的主键
[email protected] --用于排序,如:id desc (多个id desc,dt asc)
[email protected] --排序,1-顺序,2-倒序
[email protected] --查询到的总记录数
[email protected] --耗时测试时间差

---- exec ProHotelPageList ‘Hotel‘,‘*‘,10,1,‘1=1‘,‘id‘,‘id DESC‘,1,0,0
--****************************************************************************/

--ALTER PROCEDURE [dbo].[ProFlightPageList]
-- @strTable varchar(1000) = ‘‘--表名
-- ,@strField VARCHAR(1000) = ‘*‘ --查询字段
-- ,@pageSize INT = 10 --每页多少条记录
-- ,@pageIndex int = 1 --当前页
-- ,@strWhere varchar(1000) = ‘1=1‘ --查询条件
-- ,@strSortKey varchar(1000) = ‘id‘ --主键
-- ,@strSortField varchar(500) = ‘id DESC‘ --排序
-- ,@strOrderBy bit = 1 --1表示升序 2表示倒序
-- ,@RecordCount int OUTPUT --总记录数
-- ,@PageCount int OUTPUT --总页数
-- ,@UsedTime int OUTPUT --查询耗时,毫秒为单位
--AS
--SET NOCOUNT ON
--Declare @sqlcount INT, @timediff DATETIME
--select @timediff=getdate()
--Begin Tran
-- DECLARE @sql nvarchar(500),@where1 varchar(200),@where2 varchar(200)
-- IF @strWhere is null or rtrim(@strWhere)=‘‘
-- BEGIN--没有查询条件
-- SET @where1=‘ WHERE ‘
-- SET @where2=‘ ‘
-- END
-- ELSE
-- BEGIN--有查询条件
-- SET @where1=‘ WHERE (‘[email protected]+‘) AND ‘ --本来有条件再加上此条件
-- SET @where2=‘ WHERE (‘[email protected]+‘) ‘ --原本没有条件而加上此条件
-- END
-- --SET @sql=‘SELECT @intResult=COUNT(*) FROM ‘[email protected][email protected]

-- BEGIN
-- SET @sql=‘SELECT @sqlcount=COUNT(*) FROM (select ‘[email protected]+‘ from ‘+ @strTable + @where2 +‘) As tmptab‘
-- END
-- --print @sql

-- EXEC sp_executesql @sql,N‘@sqlcount int OUTPUT‘,@sqlcount OUTPUT --计算总记录数
-- SELECT @RecordCount = @sqlcount --设置总记录数
-- SELECT @PageCount = (@[email protected])/@pageSize --设置总页数

-- IF @pageIndex=1 --第一页
-- BEGIN
-- SET @sql=‘SELECT TOP ‘+CAST(@pageSize AS varchar(200))+‘ ‘[email protected]+‘ FROM ‘[email protected][email protected]+‘ORDER BY ‘+ @strSortField
-- END
-- Else
-- BEGIN
-- IF @strOrderBy=1
-- SET @sql=‘SELECT TOP ‘+CAST(@pageSize AS varchar(200))+‘ ‘[email protected]
-- + ‘ FROM ‘[email protected][email protected]
-- [email protected]+‘>(SELECT MAX(‘+case when charindex(‘.‘,@strSortKey)>0 then right(@strSortKey,len(@strSortKey)-charindex(‘.‘,@strSortKey)) else @strSortKey end+‘) ‘
-- + ‘ FROM (SELECT TOP ‘+CAST(@pageSize*(@pageIndex-1) AS varchar(200))+‘ ‘[email protected]
-- +‘ FROM ‘[email protected][email protected]
-- +‘ ORDER BY ‘[email protected]
-- +‘ ) t‘
-- +‘)‘
-- + ‘ ORDER BY ‘[email protected]
-- ELSE
-- SET @sql=‘SELECT TOP ‘+CAST(@pageSize AS varchar(200))+‘ ‘[email protected]
-- +‘ FROM ‘[email protected][email protected]
-- [email protected]+‘<(SELECT MIN(‘+case when charindex(‘.‘,@strSortKey)>0 then right(@strSortKey,len(@strSortKey)-charindex(‘.‘,@strSortKey)) else @strSortKey end+‘) ‘
-- + ‘ FROM (SELECT TOP ‘ +CAST(@pageSize*(@pageIndex-1) AS varchar(200))+‘ ‘[email protected]
-- +‘ FROM ‘[email protected][email protected]
-- +‘ORDER BY ‘[email protected]
-- +‘) t‘
-- +‘)‘
-- +‘ ORDER BY ‘[email protected]
-- END
-- --PRINT @sql
-- EXEC(@sql)

--If @@Error <> 0
-- BEGIN
-- ROLLBACK Tran
-- RETURN -1
-- END
--Else
-- BEGIN
-- COMMIT TRAN
-- SET @UsedTime = datediff(ms,@timediff,getdate())--耗时
-- RETURN @sqlcount
-- END

时间: 2024-10-03 14:45:24

机票分页存储过程!的相关文章

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