SqlServer try catch 捕获触发器\存储过程异常,结合 transaction 事务
SoEasy~,贴上代码看所有
ALTER trigger [dbo].[tgr_SG_Gathering_update]
on [dbo].[SG_Gathering]
for update --更新触发
as
--定义变量
declare @fMoney float,
@fQuantity float,
@vShop varchar(20),
@vEmpCode varchar(20),
@vSPosition varchar(20),
@vSPCode varchar(20),
@SetID int,
@Amount float,
@Coupon varchar(20),
@RJ varchar(10),
@DiscountNum int; begin try
begin transaction
if (update(bCancel)) --bCancel日结动作
begin
--变量取值
select @RJ=bTotal,@fMoney=fMoney,@vShop=vShop,@vEmpCode=vEmpCode,@vSPCode=vSPCode,@fQuantity=fQuantity,@vSPosition=vSPosition
from inserted; INSERT INTO [NoahERP].dbo.DiscountCouponPool( SetID,Coupon,CardType,Type,PP,MadeType,Rate,Price,Amount,StartDate,EndDate,
CreateDate,UseDate,ModifyPerson,IsDel,ImgUrl,UsedImgUrl,OverImgUrl,ClothesCounts)
SELECT S.ID,@Coupon,S.CardType,S.[Type],S.[PP],S.MadeType,P.Rate,P.Price,S.Amount,S.StartDate,S.EndDate,
GETDATE(),NULL,'',0,P.ImgUrl,P.UsedImgUrl,P.OverImgUrl,S.ClothesCounts
FROM [NoahERP].[dbo].[DiscountCouponSet] S
left join NoahERP.dbo.DiscountCouponPrice P on S.ID=P.SetID
where CONVERT(date, GETDATE()) >= CONVERT(date,S.StartDate) AND DATEADD(DAY,-1,CONVERT(DATE,GETDATE())) < CONVERT(date,S.EndDate)
AND S.IsStop = 0 And S.Type=1 AND S.ID=@SetID;
end
commit transaction --提交事务
end try
begin catch if(@@TRANCOUNT>0)
begin
rollback transaction;--出现错误回滚
end
--记录错误信息到[SG_GatheringLog]表
insert into [dbo].[SG_GatheringLog](ErrorNumber,
ErrorSeverity,
ErrorState,
ErrorProcedure,
ErrorLine,
ErrorMessage)
select ERROR_NUMBER() ErrorNumber, --返回导致运行 CATCH 块的错误消息的错误号
ERROR_SEVERITY() ErrorSeverity, --返回导致 CATCH 块运行的错误消息的严重级别
ERROR_STATE() ErrorState, --返回导致 CATCH 块运行的错误消息的状态号
ERROR_PROCEDURE() ErrorProcedure, --返回出现错误的存储过程或触发器名称
ERROR_LINE() ErrorLine, --返回发生错误的行号
ERROR_MESSAGE() ErrorMessage --返回导致 CATCH 块运行的错误消息的完整文本
end catch
SqlServer try catch 捕获触发器\存储过程异常,结合 transaction 事务的更多相关文章
- SqlServer try catch 捕获不到的一些错误及解决方法(转载)
测试注意 :①假如系统能捕获异常 ,并且我们自己开启了事务.系统会自动 回滚事务的,但是 我们还是要在catch里面加上 rollback tran的习惯,这样也不会提示重复rollback的错误,这 ...
- SqlServer try catch 捕获不到的一些错误及解决方法
IF (OBJECT_ID('AA','U') IS NOT NULL) DROP TABLE AA CREATE TABLE AA(ID INT) SELECT * FROM AA --注:数据库当 ...
- sql存储过程异常捕获并输出例子还有不输出过程里面判断异常 例子
编程的异常处理很重要,当然Sql语句中存储过程的异常处理也很重要,明确的异常提示能够快速的找到问题的根源,节省很多时间. 下面,我就以一个插入数据为例来说明Sql Server中的存储过程怎么捕获异常 ...
- C++ try catch 捕获空指针异常,数组越界异常
#include <exception> #include <iostream> using namespace std; /************************* ...
- JAVA 7新特性——在单个catch代码块中捕获多个异常,以及用升级版的类型检查重新抛出异常
在Java 7中,catch代码块得到了升级,用以在单个catch块中处理多个异常.如果你要捕获多个异常并且它们包含相似的代码,使用这一特性将会减少代码重复度.下面用一个例子来理解. Java 7之前 ...
- 使用SQLServer Audit来监控触发器的启用、禁用情况
原文:使用SQLServer Audit来监控触发器的启用.禁用情况 使用情景: 有时候会发现在触发器中的业务逻辑没有执行,可能是因为触发器的逻辑错误所引起的.但是有时候却是因为一些触发器被禁用了. ...
- Java方法中捕获多个异常的处理机制
/** * @author wangyunhan * @throws Exception */ public static void main(String[] argßs) throws Excep ...
- C#用 catch 捕获异类的常用类型
C#用 catch 捕获异类的常用类型 最近在书上刚刚学到了try和catch用法,然后网上找了下常用的,自己存在这里方便自己查找 Exception 类 描述 SystemException 其他 ...
- 使用cacheBuilder时捕获内部指定异常
由于cacheBuilder是另起线程获取,对call方法中的抛出的异常进行了封装.所以我们在最外层捕获时是无法直接指定异常类型捕获的, 获取异常的原因判断实例类型 public static voi ...
随机推荐
- ASP.netMVC验证码
.复制下列代码,拷贝到控制器中. #region 生成验证码图片 // [OutputCache(Location = OutputCacheLocation.None, Duration = 0, ...
- 洛谷P3690 Link Cut Tree (动态树)
干脆整个LCT模板吧. 缺个链上修改和子树操作,链上修改的话join(u,v)然后把v splay到树根再打个标记就好. 至于子树操作...以后有空的话再学(咕咕咕警告) #include<bi ...
- IDEA中使用Sqlite3
去maven下载驱动包 ( jar包 ) 下载地址:http://mvnrepository.com/artifact/org.xerial/sqlite-jdbc/3.23.1 打开IDEA 创建 ...
- TXNLP 20-33
文本处理的流程 # encoding=utf-8 import jieba import warnings # 基于jieba的分词 seg_list = jieba.cut("贪心学院专注 ...
- 【WinForm-TreeView】实现Win7 Areo效果
效果图: 新建一个继承自TreeView的控件类,代码如下: using System; using System.Windows.Forms; using System.Drawing; using ...
- vue、Element 点击按钮以弹窗形式预览pdf文件
直接上代码吧 <div > <el-button type="success" size="small" @click="isVie ...
- [人物存档]【AI少女】【捏脸数据】甜美粉色
点击下载(城通网盘):AISChaF_20191028024804811.png
- java+大文件断点续传
用JAVA实现大文件上传及显示进度信息 ---解析HTTP MultiPart协议 (本文提供全部源码下载,请访问 https://github.com/1269085759/up6-jsp-mysq ...
- C/C++ - malloc/free和new/delete的区分
new/delete与malloc/free的区别主要表现在以下几个方面: 注意:最主要的区别,new/delete是运算符,而malloc/free是函数 (1).new能够自动计算需要分配的内存空 ...
- 关于hive on spark会话的共享状态
spark sql中有一个类: org.apache.spark.sql.internal.SharedState 它是用来做: 1.元数据地址管理(warehousePath) 2.查询结果缓存管理 ...