触发器和储存过程中错误处理

SQL Server自定义异常raiserror使用示例 在使用SQL Server存储过程或者触发器时,通常会使用自定义异常来处理一些特殊逻辑。例如游标的销毁,事务的回滚。接下来将会详细的介绍SQL Server自定义异常的使用。 使用“raiserror”来抛出自定义异常。如下代码:在存储过程中,抛出自定义异常,然后在catch块中捕获自定义异常。 IF EXISTS (SELECT * FROM SYSOBJECTS WHERE name='my_sp_test' AND TYPE='P') BEGIN DROP PROCEDURE my_sp_test; END; GO create procedure my_sp_test @i in 立即下载
-----测试一  触发器中的在什么时候不放rollback
//表定义
CREATE TABLE [test] (
[test] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
CONSTRAINT [PK_test] PRIMARY KEY  CLUSTERED 
(
[test]
)  ON [PRIMARY] 
) ON [PRIMARY]
GO
CREATE TRIGGER tr_ins ON [dbo].[test] 
FOR INSERT
AS
rollback transaction
go


pb语句
string ls_code,ls_err
insert into test values('aa');
ls_code=string(sqlca.sqlcode)
ls_err=sqlca.sqlerrtext
if sqlca.sqlcode=0   then
commit;
else
rollback;
end if
messagebox(ls_code,ls_err)   //为0
messagebox(string(sqlca.sqlcode),sqlca.sqlerrtext) 为-1 commit没有begin transaction

说明:1.触发器中的rollbak tran 撤消语句的修改 直接将@@trancount=0,再执行commit就会出错
   2.语句执行虽然被撤消,但没有出错,所以是成功执行.返回状态为0
触发器改后:
CREATE TRIGGER tr_ins ON [dbo].[test] 
FOR INSERT
AS
raiserror('err ',16,1)
rollback transaction
结果为    -1
          -1 rollback without begin transaction
最后正确的改法为:如果是显示的提交和撤消语句(应用程序中用如pb)
触发器中应去掉 rollback语句,就由应用程序来撤消
结果为    -1
          0
语句被正常处理,insert语句被撤消
--但是如果使用自动提交的将rollback去掉只保留raiserror,是不会回滚(使用自动提效时就将rollback加上)

CREATE PROCEDURE dt_test  AS
insert into test select '1'
insert into test values('2')
GO
insert into test values('1')
go
exec dt_test     
//存储过程中第一条语句 insert into test select '1' 主键重复出错,但并没有终止,继续执行下一条语句
这就造成事务的错误,(要么全部修改,要么全部不修改)
所以要在每条语句后面测试执行的结果 用@@error来测试
CREATE PROCEDURE dt_test  AS
begin tran t
insert into test select '1'
if @@error<>0
  goto fin
insert into test values('2')
if @@error<>0
  goto fin

commit tran t
return
fin:
 raiserror ('error',16,1)
 rollback tran t
GO






粒子群算法实战:用Matlab解决旅行商问题(TSP)的完整代码解析 本文提供了使用粒子群算法解决旅行商问题的完整Matlab实战指南。通过将连续空间的粒子群算法进行离散化改造,采用基于交换序的策略来更新粒子位置与速度,并给出了从问题定义、数据结构设计、核心函数实现到主迭代循环的详细代码解析。文章还探讨了参数调优、性能优化及处理复杂TSP变体的进阶思路,为物流规划、路径优化等领域的工程应用提供了可直接复用的解决方案。 阅读详情

相关推荐

afe模拟前端的重要性_高性能模拟前端信号链解决方案如何助力医疗超声系统发展...

1942年,奥地利TDussik使用A型超声成像系统穿透性探测颅脑,并于1949年获得头部的超声图像,此举昭示超声系统进入到医疗领域。直到如今,超声系统作为用于人体内部的无创可视化技术,被广泛用于医疗领域。最近一份报告称到2022年,中国医疗超声诊断仪器行业的市场规模预计将达到15.8亿美元,保持6%左右的年均增长率。高性能模拟信号链前端是超声设备的关键组成部分,作为高性能模拟技术主要的提供商AD...

weixin_28799111的博客 1088

当取不到raisError的错误信息只能取到return的错误代码时,可以取connection.errors[0].description...

当取不到raisError的错误信息只能取到return的错误代码时,可以取connection.errors[0].description 转载于:https://www.cnblogs.com/HaiHong/p/6379688.html

weixin_30258027的博客 178

实现labelme批量json_to_dataset方法

labelme可以帮助我们快速的实现Mask-RCNN中数据集json文件的生成,然而还需要我们进一步的将json转成dataset,可以直接在cmd中执行labelme_json_to_dataset.exe C:\Users\Administrator\Desktop\total\1.json(路径),但是这个过程需要我们一个json文件的生成,过程很慢。 一、打开abelm...

简简单单 5万+

sybase 错误码

Sybase 错误代码集合方便查询对照中文含义 2011年09月06日 星期二 16:13 Sybase 错误代码是一组错误代码集,用于所有 Sybase 产品,包括 Adaptive Server Enterprise。Adaptive Server A

hnhbdss的专栏 1万+

UniApp实现多端支付功能完整实现指南

支付业务流程多端支付实现安全性保障异常处理最佳实践支付基础知识多端支付实现统一支付封装安全性处理异常处理最佳实践根据具体业务场景选择合适的支付方式注重安全性和用户体验做好异常处理和日志记录持续优化和改进支付流程关注我,持续分享前端项目开发经验!

weixin_63454527的博客 2128

Allegro 16.6 高级技巧实战:用Region规则和动态间距搞定高密度连接器布局布线

本文深入探讨了Allegro 16.6在高密度连接器布局布线中的高级技巧,重点介绍了Region规则和动态间距属性的应用。通过局部规则覆盖和分层控制,解决0.5mm以下引脚间距的布线难题,提升PCB设计效率和质量。

weixin_30352645的博客 439

sql Server 触发器入门代码~~

--Sql Server --触发器通过一个事件来触发,运行--支持三种触发器,插入,更新,删除--两个虚拟的测试表 inserted,deleted--插入的触发器 使用 inserted表--删除的触发器 使用 deleted表--更新的触发器 使用 两张表use study--创建表membercreate table member( m_no varchar(20) primary

w2512149的专栏 634

stm32h743的hrtim使用生成pwm波

HRTIM(High-Resolution Timer)是一种高精度定时器,其时钟频率可直接与CPU主频同步,达到480MHz。相比之下,其他传统定时器需挂载在APB总线上,受总线频率限制,最高仅支持240MHz。这种直接时钟同步机制显著提升了定时器的分辨率和精度。

d13211322的博客 1611

U8+售后服务单使用触发器实现日志记录-SQLServer

用友U8服务单日志检测

tyloonulinuli的博客 1273

手把手入门YOLO到改进优化教程 | 【P5进阶篇】YOLOv8损失函数改进实战-损失函数IoU之KLD Loss

在本节,将从 KLD Loss(Kullback–Leibler Divergence Loss)的理论到实战代码实现,带你把 KLD Loss融合进 YOLOv8 的训练框架中。并通过训练日志与实验结果,验证 KLD Loss 在实际工程中的优势。

嵌入式阿齐Archie 2万+

深入URP之Shader篇1: URP Shader概述

我们知道,URP和HDRP都是基于SRP的,尽管现在可以使用Shader Graph编写Shader,但是手写Shader仍然是有一定的优势,特别是在性能方面,手写Shader可以更极致的优化,因此我们在项目中前期都是直接使用Shader Graph编写Shader,项目后期会改成手写Shader来提高性能。而在SRP中手写Shader,我们仍然使用的是Shader Lab,这个结构并没有太大的变化,但是SRP Shader中使用Shader Lab语言还是有几点不同。

聚焦游戏和图形引擎开发技术 4637

Oracle存储过程,触发器,函数

什么是存储过程和函数?     存储过程和函数是为了执行一定任务而组合在一起的一种命名的PL/SQL块,编译后作为一种数据库对象存储在数据字典中,可以被用户多次调用来完成某种功能。 什么是触发器?      触发器是在触发一定事件的时候隐式执行的一段PL/SQL块,编译后作为一种数据库对象存储在数据字典中,只能被事件触发。  存储过程语法:  创建存储 过程 ,需 要有CREATE P...

f346867698 1036

计算机视觉卷积神经网络(CNN)基础:从LeNet到ResNet

计算机视觉卷积神经网络(CNN)基础:从LeNet到ResNet,在计算机视觉领域,卷积神经网络(Convolutional Neural Network,CNN)已然成为推动众多任务发展的核心力量。从早期简单的图像识别,到如今复杂的目标检测、语义分割、图像生成等任务,CNN 都展现出了卓越的性能。CNN 的发展历程见证了一系列经典模型的诞生,其中 LeNet 作为开山之作,为 CNN 的发展奠定了基础,而 ResNet 则通过创新性的设计,突破了传统神经网络的限制,使得网络能够构建得更深、性能更优。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 14万+

mysql储存过程

1.介绍 存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql。  使用存储过程的优点: #1. 用于替代程序写的SQL语句,实现程序与sql解耦 #2. 基于网络传输,传别名的数据量小,而直接传sql数据量大   使用存储过程的缺点: #1. 程序员扩展功能不方便 2.程序与数据库结合使用方式 #方式一: MySQL...

abc409944643的博客 299

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

oracle储存过程,job,视图,触发器(记性不好,写个例子自己记)

存储过程 1 create or replace procedure TestPro(Descerr out varchar2 ) is 2 begin 3 select * from test; 4 exception 5 when others then 6 Descerr :='接口表数据生成失败!'|| sqlerrm; 7 end Te...

weixin_30770495的博客 166

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Oracle --- 存储过程、函数、包、游标、触发器

Oracle --- 存储过程、函数、包

我的博客 1111

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

oracle关于存储过程,关于oracle存储过程

最近项目中需要做一个数据同步功能,就是要将一个数据库里面的信息定时的同步到另外一个数据库中,这样的话就需要用到储存过程 触发器 定时器 和dblink.以前没写过储存过程,恰好利用这次机会练练手,特写此博客,方便以后查阅:序号对象名称类型说明1synBaseDataTemptable临时表2synBaseDataHistorytable同步历史记录3synBaseDataTemp_Sequence...

weixin_39622710的博客 186

储存过程记录

CREATE OR REPLACE TYPE ID_TYPE AS OBJECT(ID_T varchar2(36)); CREATE OR REPLACE TYPE ID_TABLE AS TABLE OF ID_TYPE; create or replace procedure P_CM_DIRECTORY_DELETE(I_NODE_ID IN VARCHAR2, --文件节点ID

qq2462914396的博客 275

mysql储存程序包括_MySQL学习笔记——存储程序(一)

一、存储程序分为以下几种:①存储函数(stored function)。返回一个计算结果,该结果可以用在表达式里。②存储过程(stored procedure)。不直接返回一个结果,但可以用来完成一般的运算或是生成一个结果集并传递回客户。③触发器(trigger)。与数据表相关联,当那个数据表被INSERT、DELETE、UPDATE语句修改时,触发器将自动执行。④事件(event)。根据时间表在...

weixin_40008135的博客 1136

PL/SQL学习 (部分语法/创建函数/储存过程/游标等)

PL/SQL **PL/SQL 是对 SQL 语言存储过程语言的扩展 ** 它现在已经成为 一种过程处理语言,简称 PL/SQL。 (有些类似普通编程语言与sql的结合) PL/SQL 块 PL/SQL 程序由三个块组成,即声明部分、执行部分、异常处理部分 DECLARE /* 声明部分: 在此声明 PL/SQL 用到的变量,类型及游标,以及局部的存储过程和函数 */ BEGIN /* 执行部分: 过程及 SQL 语句 , 即程序的主要部分 */ EXCEPTION /* 执行异常

m0_53959739的博客 1476

flink使用countWindow,往gp中批量写数据,并自定义超时触发器

设置超时触发时间类型为ProcessingTime env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime); 主流程代码 dataStream .keyBy(r -> r.f1)//按表名进行keyBy,避免同一张表的数据传入出现先后问题 .timeWindow(Time.of(10, TimeUnit.SECONDS))//超时时间10秒 .trigger(new CountTri

WuBoooo的博客 2206

Mysql:语法:存储程序(存储过程、存储函数、视图、触发器、计划任务)

存储程序分类 存储过程 存储函数 视图 触发器 计划任务 在mysql.exe客户端里写存储程序的";"分割符问题   这个问题来自mysql.exe客户端本身以";"作为语句的分隔符(结束符)本身。而大部分的管理、开发mysql的应用程序均类似于mysql.exe,所以必须通过delimiter这个mysql服务器可识别的命令来临时修改服务器认可的有效语句分隔符 存储程序...

weixin_30621919的博客 77

MySQL存储程序

1.什么是MySQL存储程序? 存放在MySQL服务器端,供重复使用的对象叫做存储程序。存储程序分为以下四种: (1)存储过程:不直接返回一个计算结果,但可以用来完成一般的运算或是生成一个结果集并传递回客户端。 一条SQL语句如果比作一行java代码,存储过程就相当于一个java方法,可以包含许多SQL语句,进行更复杂的操作。 (2)存储函数:返回一个计算结果,该结果可以用在表达式里。 ...

月下泛舟的博客 2067

存储过程

一、存储过程的概念 1、分类:系统存储过程: 以sp_或xp_打头用户自定义 :以proc_打头2、优点:执行速度快 效率高模块式编程减少网络流量提高安全性 二、系统存储过程 常用的系统存储过程 EXEC sp_databases --列出当前系统中的数据库 EXEC sp_renamedb 'Northwind','Northwind1' --修改数据库的名称(单用...

weixin_30467087的博客 78

SQL server 数据库

增:insert into 表名(列名) values(内容) 删:delete from 表名 where 条件 改:Update 表名 set 修改内容 where 条件 查:select 内容 form 表名 where 条件 Max/min 最大/最小 avg 平均值 count 计数 sum 和 内连接:指返回两个表中完全符合条件的记录的连接查询 Select 内容 from表名 join 表名 ON 相同字段 where 条件 通过一字查信息:%代表两个以上的字符 _代表一个字符 Sele

qq_40468470的博客 158

sql 在存储过程中使用事务(转)

本来想自己写一下,后来发现这个写的比我理解的要好,所以直接拽过来了,链接地址:https://www.cnblogs.com/RascallySnake/archive/2010/05/17/1737298.html 一、存储过程中使用事务的简单语法 在存储过程中使用事务时非常重要的,使用数据可以保持数据的关联完整性,在Sql server存储过程中使用事务也很简单,用一个例子来说...

weixin_30344795的博客 164
上一篇: datawindow 检验表达式
下一篇: pb sqlcode取值意义
MakeToday
博客等级 码龄22年 13粉丝 138原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值