在存储过程中捕获运行时异常、错误

BHW 2003-08-05 02:49:47
declare @f_param varchar(30)
declare @id int
set @f_param='1A'
set @f_param=rtrim(ltrim(@f_param))
set @id=cast(@f_param as int) --在此转换会出现类型错误

IF @@ERROR <>0
begin
print 'catch err'
return
end
else
print 'no catch'
--我想用上面的方法捕获用自己的程序处理再跳出,但是系统只给出错误,没捕获到
“将 varchar 值 '1A' 转换为数据类型为 int 的列时发生语法错误。”
该如何改才能让程序捕获,而不是让程序非法终止?
...全文
144 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
txlicenhe 2003-08-05
  • 打赏
  • 举报
回复
一、首先从SQLServer中Error讲起,SQL中错误处理有些怪辟 错误级别同是16但结果都不同。

select * from 一个不在的表
if @@error<>0
print '这个没有输出'
go

raiserror('',16,3)
if @@error<>0
print '这个输出了'
go

exec('select * from 一个不在的表')
if @@error<>0
print '这个输出了'
go

exec sp_executesql N'select * from 一个不在的表'
if @@error<>0
print '这个输出了'

这样你可以发现通过exec或sp_executesql执行可疑的sql,这样就可以在后面捕捉到被异常终止的错误。


二、引出孤立事务:
1、孤立事务的产生

select @@trancount 当前连接的活动事务数 --当前连接的活动事务数为0

begin tran

select * from 一个不在的表
if @@error<>0
begin
print '没有执行到这里来!'
if @@trancount<>0 rollback tran
end

commit tran

select @@trancount 当前连接的活动事务数 --执行后你看看 当前连接的活动事务数为1,且重复执行会每次累加,这是很耗资源的。

应为rollback根本就没有被回滚。

2、使用现有手段解决孤立事务


print @@trancount print '当前连接的活动事务数' --当前连接的活动事务数为0

if @@trancount<>0 rollback tran --在这里写可以让孤立事务只保持到下次你的过程被调用
begin tran

select * from 一个不在的表
if @@error<>0
begin
print '没有执行到这里来!'
if @@trancount<>0 rollback tran
end

commit tran

---执行后你看看 当前连接的活动事务数为1,但重复执行不会累加
print @@trancount print '当前连接的活动事务数'

三、使用 set xact_abort 来控制部分违反约束的错误的执行过程

create table Table1 (a int check(a>100))
go

set xact_abort on
begin tran
insert table1 values(10)
print '这里没有被执行'
commit tran
go

print '' print '==============================================' print ''

set xact_abort off
begin tran
insert table1 values(10)
print '这里被执行'
commit tran

go
drop table table1

但 set xact_abort 对于编译产生的错误确没有起作用,且同样会产生孤立事务

set xact_abort on
begin tran
insert 一个不在的表 values(10)
print '这里没有被执行'
commit tran
go

print '' print '==============================================' print ''

set xact_abort off
begin tran
insert 一个不在的表 values(10)
print '这里没有被执行'
commit tran
go

select @@trancount 当前连接的活动事务数 ---有两个孤立事务
if @@trancount<>0 rollback tran


对于sql中怪辟的各种错误,和孤立事务在t-sql编程中一定要注意,小心孤立事务的陷阱,尽量避免浪费或孤立资源,Microsoft公开宣布过SQLServe下一版本Yukon将有内置异常处理语法。那时可以通过代码对无法预料的错误有更好的控制。
pengdali 2003-08-05
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/TopicView1.asp?id=1675986
内容概要:本文系统研究了基于企鹅优化算法(Penguin Optimization Algorithm, POA)在航空调度问题的应用,并提供了完整的Matlab代码实现。通过将生物启发式智能优化算法引入航空交通管理领域,重点解决了航班起降序列安排、停机位分配、资源调度等复杂组合优化问题。文章详细阐述了POA算法的数学模型、搜索机制与收敛特性,构建了以最小化调度总成本、降低航班延误率、提升跑道与停机位利用效率为目标的多目标优化框架,综合考虑时刻约束、安全间隔、机型匹配等实际运行限制。通过仿真实验验证了该方法相较于传统优化算法在求解效率和解的质量方面的优越性,展现出良好的工程应用前景。; 适合人群:具备一定智能优化算法理论基础和Matlab编程能力的高校研究生、科研机构研究人员,以及从事空交通管理、机场运营管理等相关工作的工程技术与决策支持人员。; 使用场景及目标:①解决机场日常航班调度、紧急情况下的动态重调度等实际运营问题;②为智能优化算法在交通运输领域的落地应用提供可复现的技术范例;③作为新型元启发式算法性能测试的基准案例,服务于算法改进与对比研究。; 阅读建议:建议读者结合提供的Matlab代码深入剖析算法实现细节,重点关注目标函数的建模方式、约束条件的处理策略以及参数敏感性分析,鼓励通过调整算法参数、引入混合优化策略或拓展实际应用场景以进一步提升模型的鲁棒性与实用性。
内容概要:本文档聚焦于机械臂通用连杆转动关节的机器人逆动力学建模与仿真,系统实现了牛顿-欧拉递推算法和拉格朗日方法在多自由度机械臂动力学分析的Matlab编程应用。资源详细展示了关节空间力矩、角加速度、速度与位置之间的动态耦合关系,涵盖刚体动力学建模、递归计算流程及数值仿真验证,并提供了可用于科研与教学的可执行代码框架。同时,文档列举了多个相关科研方向与Matlab/Simulink应用场景,凸显其在机器人控制、轨迹规划与动力学优化等方面的学术与工程价值。; 适合人群:具备机器人学基础知识和Matlab编程能力的高校研究生、自动化、机械电子、控制工程等专业的高年级本科生,以及从事机器人系统研发的科研人员与工程师;; 使用场景及目标:①深入理解机器人逆动力学的核心理论及其数学推导过程;②掌握牛顿-欧拉法与拉格朗日法在实际系统的建模差异与实现技巧;③为机器人控制器设计、轨迹优化、动态仿真等课题提供算法支撑与代码参考; 阅读建议:建议结合《Robotics: Modelling, Planning and Control》等经典教材同步学习,重点对照公式推导与代码实现的一致性,利用Simulink进行可视化仿真以增强对惯性项、科氏力与离心力、重力矩等物理含义的理解,并通过调试不同构型机械臂参数提升实践能力。
内容概要:本文是一份系统化的大数据学习路线图,全面覆盖从零基础到架构专家的四个阶段成长路径,包括基础准备期(Linux、Java/Python、SQL)、核心技术期(Hadoop、Hive、Kafka、Spark)、进阶提升期(Flink、HBase、数据仓库建模、数据湖)以及架构专家期(大数据架构设计、数据治理、OLAP引擎、性能调优)。 文档详细规划了各阶段的学习内容、技术要点、实战项目、检验标准,并提供针对不同背景人群的差异化学习计划、最新学习资源推荐及常见避坑指南,帮助学习者构建完整知识体系并具备企业级实战能力。 适合人群:大数据入门学习者、初级工程师、希望系统复盘提升的技术人员、转行求职者以及计算机相关专业学生。 使用场景及目标: ①为初学者提供清晰的大数据技术学习路径与核心技术栈掌握方案; ②指导开发者完成从理论到实战的跨越,独立构建离线数仓、实时计算等企业级项目; ③辅助求职者进行面试准备、项目包装与技能查漏补缺;④支持不同背景的学习者根据自身情况定制个性化学习计划。 阅读建议:学习过程应坚持“动手实践+原理理解+项目驱动”的原则,避免只看视频不动手、忽视SQL基础或盲目追新,建议结合文档的实战项目与推荐资源边学边练,并定期复盘以形成体系化能力。

22,296

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧