[SQL server]存储过程事务

本文通过一个简单的SQL存储过程示例介绍了如何使用事务来确保数据的一致性和完整性。包括事务的开始、数据插入操作及异常处理等内容。
简单的小例子
CREATE PROCEDURE testPro
AS
    
/**//* ------- 事务开始 ---------- */
    BEGIN TRANSACTION tran_test

    
/**//* -------- 保存事务 ----------*/
    SAVE TRANSACTION tran_test

        
/**//* -------- 数据操作 ---------*/
        INSERT [table1] ( [content] ) VALUES ( 
'43332' )

    
/**//*---------- 提交事务 ------------*/
    COMMIT TRANSACTION tran_test

    
/**//*--------- 判断是否有错误 ----------*/
    IF ( @@ERROR 
<> 0 )
    BEGIN
        
/**//*---------- 自定义错误输出 ----------*/
        RAISERROR( 
'Insert data error!',16,1 )
        
/**//*-------- 事务回滚 --------*/
        ROLLBACK TRANSACTION tran_test
    END
    
    
/**//*------- 判断事务数是否大于0 -----------*/
    IF ( @@TRANCOUNT 
> 0 )
    BEGIN
        
/**//*-------- 事务回滚 --------*/
        ROLLBACK TRANSACTION tran_test
    END
GO

 
SQL Server 中,事务是确保数据一致性和完整性的重要机制,在存储过程中可使用事务处理一组 SQL 语句。 SQL Server 中可使用特定的 T-SQL 语句来控制事务。开始事务使用 `BEGIN TRANSACTION` 或 `BEGIN TRAN`;使用 `COMMIT TRANSACTION` 或 `COMMIT TRAN`提交当前事务,使所有更改永久生效;使用 `ROLLBACK TRANSACTION` 或 `ROLLBACK TRAN` 回滚当前事务,撤销自事务开始以来所做的所有更改;还能使用 `SAVE TRANSACTION <savepoint_name>` 在事务中创建保存点,实现部分回滚 [^3]。 SQL Server 中的事务需要显式开启、提交或回滚,一个事务必须有 `Commit Transaction` 或 `Rollback Transaction` ,且 `Commit` 或 `Rollback` 操作要在 `return` 之前执行 [^5]。 以下是在存储过程中使用事务的示例: ```sql CREATE PROCEDURE schema_name.procedure_name @param1 datatype [= default_value] [OUTPUT], @param2 datatype [= default_value] [OUTPUT], ... AS BEGIN -- 减少网络流量(可选) SET NOCOUNT ON; -- 开始事务 BEGIN TRANSACTION; BEGIN TRY -- SQL 语句 SELECT column1, column2 FROM table_name WHERE condition; -- 提交事务 COMMIT TRANSACTION; -- 返回值(可选) RETURN 0; END TRY BEGIN CATCH -- 回滚事务 IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION; -- 处理错误 DECLARE @ErrorMessage NVARCHAR(4000); DECLARE @ErrorSeverity INT; DECLARE @ErrorState INT; SELECT @ErrorMessage = ERROR_MESSAGE(), @ErrorSeverity = ERROR_SEVERITY(), @ErrorState = ERROR_STATE(); RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState); RETURN -1; END CATCH END; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值