文章类型: DATABASE
关键词: MSSQL,事务,两种方式,两种方法,存储过程,PROCEDURE,TRANSACTION,TRAN
内容摘要: MSSQL中带事务的存储过程:MSSQL,事务,两种方式,两种方法,存储过程,PROCEDURE,TRANSACTION,TRAN

MSSQL中带事务(两种方式)的存储过程

2018/8/29 10:12:51    来源:apple    阅读:

需求内容描述:

为了帮助客户更好地管理样本,快速地了解样本信息的存储情况,使用情况,能够方便地进行样本信息的登记、使用、(多条件下的组合)查询(样本信息、出库信息)、修改、删除、打印、导出(可选择导出至Excel中)等功能,另外需具备软件使用授权(通过登录、权限管理)。

样本的仓储结构:设备级(一级,即顶级),设备下可以进行分区(二级,譬如:A设备分为1,2,3,4区),分区下可以多个提桶(三级,譬如:1分区下有1,2,3号提桶),提桶下又可以进行分层(四级,譬如:1号提桶分为1,2,3,4,5,6,7,8,9层),分层下划分为很多格子(五级,譬如1层下分为“1”号,“2”号,“3”号,“4”号,“5”号,“6”号,“7”号,“8”号,“9”号,“10”号,“11”号,“12”号,“13”号,“14”号,“15”号,“16”号,“17”号,“18”号,“19”号,“20”号的格子),样本最终是存放在格子中的。

样本出库界面截图如下,

图片.png

出库的MSSQL使用事务处理的存储过程的代码如下:

CREATE PROCEDURE [dbo].[usp_出库_增]
    -- Add the parameters for the stored procedure here
    @出库编号 varchar(12),
    @使用量 int,
    @剩余量 int,
    @使用时间 datetime,
    @使用用途 varchar(100),
    @备注 varchar(200),
    @样本ID int,
    @操作者ID int
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    BEGIN TRANSACTION------------------开始事务
    DECLARE @ErrorSum int,@SampleTakeID int,@格子ID int
    SET @ErrorSum=0
    insert 出库(出库编号,使用量,剩余量,使用时间,使用用途,备注,样本ID,操作者ID) values(@出库编号,@使用量,@剩余量,@使用时间,@使用用途,@备注,@样本ID,@操作者ID)
    SET @ErrorSum = @ErrorSum + @@ERROR --累计是否有错误
    select @SampleTakeID=@@IDENTITY;
    select @格子ID=分层格子ID from 样本 where ID=@样本ID
    if @剩余量>0
    begin
        update 样本 set 剩余量=@剩余量 where ID=@样本ID
        SET @ErrorSum = @ErrorSum + @@ERROR --累计是否有错误
    end
    else
    begin
        update 样本 set 剩余量=@剩余量,使用中=0 where ID=@样本ID
        SET @ErrorSum = @ErrorSum + @@ERROR --累计是否有错误
        update 分层格子 set 使用标记=0 where ID=@格子ID
        SET @ErrorSum = @ErrorSum + @@ERROR --累计是否有错误
    end
    IF @errorSum<>0  --如果SQL语句执行出错
    BEGIN
        SET @SampleTakeID=-1
        ROLLBACK TRANSACTION 
    END  
    ELSE
    BEGIN
        COMMIT TRANSACTION   
    END
    
    select @SampleTakeID ID

END

GO

也可以使用下面的一种事务处理方式,代码如下:

CREATE PROCEDURE [dbo].[usp_出库_增]
    -- Add the parameters for the stored procedure here
    @出库编号 varchar(12),
    @使用量 int,
    @剩余量 int,
    @使用时间 datetime,
    @使用用途 varchar(100),
    @备注 varchar(200),
    @样本ID int,
    @操作者ID int
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    BEGIN TRANSACTION------------------开始事务
    
    
---------事务处理的第二种方法------------    
BEGIN TRY---------------------开始捕捉异常
    BEGIN TRAN------------------开始事务
    DECLARE @SampleTakeID int,@格子ID int
    insert 出库(出库编号,使用量,剩余量,使用时间,使用用途,备注,样本ID,操作者ID) values(@出库编号,@使用量,@剩余量,@使用时间,@使用用途,@备注,@样本ID,@操作者ID)
    select @SampleTakeID=@@IDENTITY;
    select @格子ID=分层格子ID from 样本 where ID=@样本ID
    if @剩余量>0
    begin
        update 样本 set 剩余量=@剩余量 where ID=@样本ID
    end
    else
    begin
        update 样本 set 剩余量=@剩余量,使用中=0 where ID=@样本ID
        update 分层格子 set 使用标记=0 where ID=@格子ID
    end
   
    select @SampleTakeID ID
    COMMIT TRAN -------提交事务
END TRY-----------结束捕捉异常
BEGIN CATCH------------有异常被捕获
    IF @@TRANCOUNT > 0---------------判断有没有事务
    BEGIN
        ROLLBACK TRAN----------回滚事务
    END 
    EXEC 'YourLogErrorProcedure'-----------记录存储过程执行时的错误信息,自定义
END CATCH--------结束异常处理
END


↑ 上一篇文章:带分页的复杂sql存储过程查询例子代码 关键词:sql,查询,存储过程,select,时间,条件,排序,.. 发布日期:2018/8/29 9:41:43
↓ 下一篇文章:C++修改文件名 关键词:VC,C++,修改,文件名,rename 发布日期:2018/9/4 17:02:55
相关文章:
使用SQL的存储过程来处理字符串分割的模糊查询问题 关键词:存储过程,procedure,字符串分割,模糊查询,SQL语句拼接,split,ROW_NUMBER 发布日期:2015-07-14 16:19
SQL Server 2008 R2——VC++ ADO 操作 事务 关键词:SQL,Server,2008,R2,VC++,ADO,事务,操作,存储过程,参数 发布日期:2016-09-22 10:35
ASP.NET C#调用存储过程来获取output参数的值 关键词:asp.net,C#,SQL,Server,存储过程,output参数值 发布日期:2015-07-07 17:44
相关目录:.NETDATABASE
我要评论
正在加载评论信息......