通用分頁存儲過程.

MSSQL中要想分頁只能借助 row_number() over( order by'') 函數以下是我修改后的一個通用存儲過程,


CREATE PROCEDURE [dbo].[Common_Method_Page] 
	@columns varchar(max)=N'*', --要显示的列名,用逗号隔开 
	@tableName varchar(max), --要查询的表名 
	@tempTableName varchar(50)=N'tempTable',--表名的簡寫 
	@orderColumnName varchar(max), --排序的列名 
	@order varchar(max) ='ASC', --排序的方式,升序为asc,降序为 desc 
	@where varchar(max) = '1=1', --where 条件,如果不带查询条件,请用 1=1 
	@pageIndex int =1, --当前页索引 
	@pageSize int =20, --页大小(每页显示的记录条数)
    @remarkColumn varchar(max)='', --當多表查詢時,用於查詢副表的字段
	@pageCount int=null output, --总页数,输出参数 
	@records int=null output --總記錄數
as 
begin 

-- author:MichaelYang
-- modifiedDate  :2011-9-7 
--這是一個動態分頁的存儲過程
	declare @sqlRecordCount nvarchar(max) --得到总记录条数的语句 
	declare @sqlSelect nvarchar(max) --查询语句 
--print ''+@columns +'';
set @columns = ISNULL(@columns,N'*'); --默認查詢出所有的記錄
set @order=ISNULL(@order,N'ASC');     --默認按升序排序
set @pageIndex = ISNULL(@pageIndex,1);--默認從第一頁開始
set @pageSize =ISNULL(@pageSize,20);  --設置頁面大小為20條記錄
set @where = ISNULL(@where,N'1=1');   --默認按條件查詢為真
set @tempTableName =ISNULL(@tempTableName,N'tempTable');
set 
	@sqlRecordCount=N'select @recordCount=count(*) from ' +@tableName + ' where '+ @where 
	print '[@sqlRecordCount:]'+@sqlRecordCount
declare @recordCount int --保存总记录条数的变量 
exec sp_executesql @sqlRecordCount,N'@recordCount int output',@recordCount output ;
--动态 sql 传参 
if( @recordCount % @pageSize = 0) --如果总记录条数可以被页大小整除 
	   set @pageCount = @recordCount / @pageSize --总页数就等于总记录条数除以页大小 
else --如果总记录条数不能被页大小整除 
	   set @pageCount = @recordCount / @pageSize + 1 --总页数就等于总记录条数除以页大小加1 
if(@remarkColumn is null) or (@remarkColumn ='') or (@remarkColumn ='null')
	   set @sqlSelect = N'select '+@columns+' from (select row_number() over (order by ' +@orderColumnName+' '+@order +') as tempid,* from ' +@tableName+' where '+ @where +') as '+@tempTableName+' where tempid between ' +str((@pageIndex - 1)*@pageSize + 1 ) +' and '+str( @pageIndex * @pageSize) 
else
       set  @sqlSelect = N'select '+@columns+','+@remarkColumn+' from (select row_number() over (order by ' +@orderColumnName+' '+@order +') as tempid,*,'+@remarkColumn+' from ' +@tableName+' where '+ @where +') as '+@tempTableName+' where tempid between ' +str((@pageIndex - 1)*@pageSize + 1 ) +' and '+str( @pageIndex * @pageSize) 
print '@sqlSelect:'+@sqlSelect;
exec (@sqlSelect)--执行动态Sql 
set @records =@recordCount;
end 
 
【四轴飞行器】非线性三自由度四轴飞行器模拟器研究(Matlab代码实现)内容概要:本文围绕非线性三自由度四轴飞行器模拟器的研究展开,重点介绍了基于Matlab的建模与仿真方法。通过对四轴飞行器的动力学特性进行分析,构建了非线性状态空间模型,并实现了姿态与位置的动态模拟。研究涵盖了飞行器运动方程的建立、控制系统设计及数值仿真验证等环节,突出非线性系统的精确建模与仿真优势,有助于深入理解飞行器在复杂工况下的行为特征。此外,文中还提到了多种配套技术如PID控制、状态估计与路径规划等,展示了Matlab在航空航天仿真中的综合应用能力。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的高校学生、科研人员及从事无人机系统开发的工程技术人员,尤其适合研究生及以上层次的研究者。; 使用场景及目标:①用于四轴飞行器控制系统的设计与验证,支持算法快速原型开发;②作为教学工具帮助理解非线性动力学系统建模与仿真过程;③支撑科研项目中对飞行器姿态控制、轨迹跟踪等问题的深入研究; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注动力学建模与控制模块的实现细节,同时可延伸学习文档中提及的PID控制、状态估计等相关技术内容,以全面提升系统仿真与分析能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值