触发器中调用存储过程,事务的使用

本文通过具体示例介绍了如何在SQL中使用事务控制及触发器来实现数据更新操作的同时进行额外的数据处理任务。首先创建了必要的表结构,并定义了一个触发器,在表更新时触发事务流程,插入一条记录到另一个表中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者蓉儿szx1999

1.set xact_abort off
2.设置保存点  

IF OBJECT_ID('TA')IS NOT NULL DROP TABLE TA
GO
CREATE TABLE TA( ID INT IDENTITY,性別 NVARCHAR(5) CHECK(性別 IN(N'',N'')))
IF OBJECT_ID('PRO_TEST')IS NOT NULL DROP PROC PRO_TEST

GO
CREATE PROC PRO_TEST
@SEX NVARCHAR(5)
AS
INSERT TA SELECT @SEX
GO
IF OBJECT_ID('TB')IS NOT NULL DROP TABLE TB
GO
CREATE TABLE TB(ID INT ,[NAME] VARCHAR(10))
INSERT TB SELECT 1,'張三'
IF OBJECT_ID('TRI_TEST')IS NOT NULL DROP TRIGGER TRI_TEST
GO
CREATE TRIGGER TRI_TEST ON TB
FOR UPDATE
AS
set xact_abort off
IF UPDATE(ID)
   
save tran procTran
      
EXEC PRO_TEST 'TEST'
   
IF(@@error <> 0)
       
ROLLBACK TRAN procTran
   
ELSE
       
COMMIT TRAN procTran

set xact_abort on
GO

UPDATE TB SET ID=888 WHERE ID=1
select * from tb
/*
ID          NAME
----------- ----------
888         張三

(1 行受影响)
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值