- -分页的sql
老生常谈~~这个不是我写的不过加入了分析在最下面~~
/Files/ajaxren/分析过的排序.rar
alter PROCEDURE GetRecordFromPage1
@tblName varchar(255), -- 表名
@fldName varchar(255), -- 字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@IsCount bit = 0, -- 返回记录总数, 非0 值则返回
@OrderType bit = 0, -- 设置排序类型, 非0 值则降序
@strWhere varchar(4000) = '' -- 查询条件(注意: 不要加where)
AS
declare @strSQL varchar(6000) -- 主语句
declare @strTmp varchar(6000) -- 临时变量
declare @strOrder varchar(6000) -- 排序类型
if @OrderType != 0 --降序排列--select min 该函数返回列中最小的非NULL值
begin
set @strTmp = '<(select min'
set @strOrder = ' order by [' + @fldName +'] desc'-- @fldName 是要排序的字段
end
else
begin --升序排列
set @strTmp = '>(select max'
--设置排序类型
set @strOrder = ' order by [' + @fldName +'] asc'
end
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
+ @strOrder
--print @strSQL
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + '] where (' + @strWhere + ') '
+ @strOrder + ') as tblTmp) and (' + @strWhere + ') ' + @strOrder
--由于函数不能处理pageindex=1所以有一个特别的函数处理
if @PageIndex = 1
begin
set @strTmp = ''
if @strWhere != ''
set @strTmp = ' where (' + @strWhere + ')'
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + ']' + @strTmp + ' ' + @strOrder
end
--由于函数不能处理pageindex=0所以有一个特别的函数处理
if @IsCount != 0
set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
exec (@strSQL)
--print @strSQL
GO
--执行函数
exec GetRecordFromPage1 'Table_1','Tab_Id',2,1,0,1
--思路首先跟巨你输入的一页显示多少条纪录分页然后根据显示几页设置数据
-----一页显示多少条纪录]--生序
select top 5 *from Table_1 where [Tab_Id]>--我只取纪录中的5条,并且是生序的但是有个要求主键id必须大与一个条件(由于有这个条件在如果条件是1则取1后面的5条)
(select max([Tab_Id])--在下面的查询中找到最大的字段数据用于上面的筛选
--------------显示第几页------这里是控制上面说的条件的-比如这里是1则上面显示第一条后面的饿
from( select top 1 [Tab_Id]from Table_1 order by [Tab_Id] asc) as tblTmp)order by [Tab_Id] asc
--降序-首先到序是从最后往前显示,第一行显示的是原来升须最后一条数据
--显示几条数据------------设置条件必须小于其实和大于一样就是向下推
select top 2 * from [Table_1] where [Tab_Id]--如果下面返回id是则显示5,4的信息因为是降序
<(select min([Tab_Id]) from --根据下面的临时表查询找到最小的id用于上面的刷选
--这里显示的是1,2条纪录--当然也是降序的
(select top 2 [Tab_Id] from [Table_1] order by [Tab_Id] desc) as tblTmp) order by [Tab_Id] desc
//--------------------------------------
select top 2 * from [Table_1]控制一次显示的字段
where [Tab_Id]是筛选的条件就是控制数据向下移动的 如果这个条件是3那么取的是第3条以后的
生序>,降序< 目的都是往后推数据
(select min([Tab_Id]) from-是取得下面数据中最小的数据用于降序
(select max([Tab_Id]) from-是取得下面数据中最大的用于生序
//--上面2条选1个就可以了配合>或者<使用
( select top 1 [Tab_Id]from Table_1 order by [Tab_Id] asc) as tblTmp)order by [Tab_Id] asc
--这1句是找到从上面开始属的数据-存入临时表-好给上面2条数语句检索最大或者是最小数据
/Files/ajaxren/分析过的排序.rar
alter PROCEDURE GetRecordFromPage1
@tblName varchar(255), -- 表名
@fldName varchar(255), -- 字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@IsCount bit = 0, -- 返回记录总数, 非0 值则返回
@OrderType bit = 0, -- 设置排序类型, 非0 值则降序
@strWhere varchar(4000) = '' -- 查询条件(注意: 不要加where)
AS
declare @strSQL varchar(6000) -- 主语句
declare @strTmp varchar(6000) -- 临时变量
declare @strOrder varchar(6000) -- 排序类型
if @OrderType != 0 --降序排列--select min 该函数返回列中最小的非NULL值
begin
set @strTmp = '<(select min'
set @strOrder = ' order by [' + @fldName +'] desc'-- @fldName 是要排序的字段
end
else
begin --升序排列
set @strTmp = '>(select max'
--设置排序类型
set @strOrder = ' order by [' + @fldName +'] asc'
end
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
+ @strOrder
--print @strSQL
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + '] where (' + @strWhere + ') '
+ @strOrder + ') as tblTmp) and (' + @strWhere + ') ' + @strOrder
--由于函数不能处理pageindex=1所以有一个特别的函数处理
if @PageIndex = 1
begin
set @strTmp = ''
if @strWhere != ''
set @strTmp = ' where (' + @strWhere + ')'
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + ']' + @strTmp + ' ' + @strOrder
end
--由于函数不能处理pageindex=0所以有一个特别的函数处理
if @IsCount != 0
set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
exec (@strSQL)
--print @strSQL
GO
--执行函数
exec GetRecordFromPage1 'Table_1','Tab_Id',2,1,0,1
--思路首先跟巨你输入的一页显示多少条纪录分页然后根据显示几页设置数据
-----一页显示多少条纪录]--生序
select top 5 *from Table_1 where [Tab_Id]>--我只取纪录中的5条,并且是生序的但是有个要求主键id必须大与一个条件(由于有这个条件在如果条件是1则取1后面的5条)
(select max([Tab_Id])--在下面的查询中找到最大的字段数据用于上面的筛选
--------------显示第几页------这里是控制上面说的条件的-比如这里是1则上面显示第一条后面的饿
from( select top 1 [Tab_Id]from Table_1 order by [Tab_Id] asc) as tblTmp)order by [Tab_Id] asc
--降序-首先到序是从最后往前显示,第一行显示的是原来升须最后一条数据
--显示几条数据------------设置条件必须小于其实和大于一样就是向下推
select top 2 * from [Table_1] where [Tab_Id]--如果下面返回id是则显示5,4的信息因为是降序
<(select min([Tab_Id]) from --根据下面的临时表查询找到最小的id用于上面的刷选
--这里显示的是1,2条纪录--当然也是降序的
(select top 2 [Tab_Id] from [Table_1] order by [Tab_Id] desc) as tblTmp) order by [Tab_Id] desc
//--------------------------------------
select top 2 * from [Table_1]控制一次显示的字段
where [Tab_Id]是筛选的条件就是控制数据向下移动的 如果这个条件是3那么取的是第3条以后的
生序>,降序< 目的都是往后推数据
(select min([Tab_Id]) from-是取得下面数据中最小的数据用于降序
(select max([Tab_Id]) from-是取得下面数据中最大的用于生序
//--上面2条选1个就可以了配合>或者<使用
( select top 1 [Tab_Id]from Table_1 order by [Tab_Id] asc) as tblTmp)order by [Tab_Id] asc
--这1句是找到从上面开始属的数据-存入临时表-好给上面2条数语句检索最大或者是最小数据