首页
文章
文库
登录
|
注册
最新
推荐
热门
主题
关注
收藏
反馈
关注公众号
存储过程中的事务实现
来源
本站原创
佚名
基本上方法有两个:
SET XACT_ABORT
指定当 Transact-SQL 语句产生运行时错误时,Microsoft® SQL Server™ 是否自动回滚当前事务。
语法
SET XACT_ABORT { ON | OFF }
注释
当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行 时 错误,整个事务将终止并回滚。为 OFF 时,只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。编译错误(如语法错误)不受 SET XACT_ABORT 的影响。
对于大多数 OLE DB 提供程序(包括 SQL Server),隐性或显式事务中的数据修改语句必须将 XACT_ABORT 设置为 ON。唯一不需要该选项的情况是提供程序支持嵌套事务时。有关更多信息,请参见分布式查询和分布式事务。
SET XACT_ABORT 的设置是在执行或运行时设置,而不是在分析时设置。
例:
create proc testproc
as
SET XACT_ABORT on
begin tran
insert into tableA (field1) values ('aa')
insert into tableB (field1) values ('bb')
commit tran
SET XACT_ABORT off
begin tran
/*要实现的操作*/
commit tran
if @@error>0
rollback
例:
create proc testproc
as
begin tran
insert into tableA (field1) values ('aa')
insert into tableB (field1) values ('bb')
commit tran
if @@error>0
rollback
另外,在.NET的ADO.NET数据库编程中,可以使用SqlTransaction实现事务操作。
例:
Public Sub RunSqlTransaction()Sub RunSqlTransaction(myConnString As String)
Dim myConnection As New SqlConnection(myConnString)
myConnection.Open()
Dim myCommand As SqlCommand = myConnection.CreateCommand()
Dim myTrans As SqlTransaction
' Start a local transaction
myTrans = myConnection.BeginTransaction()
' Must assign both transaction object and connection
' to Command object for a pending local transaction
myCommand.Connection = myConnection
myCommand.Transaction = myTrans
Try
myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"
myCommand.ExecuteNonQuery()
myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')"
myCommand.ExecuteNonQuery()
myTrans.Commit()
Console.WriteLine("Both records are written to database.")
Catch e As Exception
Try
myTrans.Rollback()
Catch ex As SqlException
If Not myTrans.Connection Is Nothing Then
Console.WriteLine("An exception of type " & ex.GetType().ToString() & _
" was encountered while attempting to roll back the transaction.")
End If
End Try
Console.WriteLine("An exception of type " & e.GetType().ToString() "was encountered while inserting the data.")
Console.WriteLine("Neither record was written to database.")
Finally
myConnection.Close()
End Try
End Sub 'RunSqlTransaction
关联文档
DeepSeek 搞钱指令库
T GDWJ 016 公立医院全面预算管理工作指南
人工智能技术发展与应用实践
DeepSeek行业应用案例集解锁
2025AI大模型产业市场前景及投资研究报告
大家都在看
一文读懂:模型上下文协议(MCP)
AI产品经理如何搭建AI业务架构:从基础到应用的三层架构设计
智能BI平台架构的全景解析与应用场景
大模型是怎么被训练出来的?
渠道分析从入门到精通
全面解读DeepSeek蒸馏技术:模型蒸馏和数据蒸馏
一文分享 ChatBI 实践经验
深度学习五大模型:CNN、Transformer、BERT、RNN、GAN解析
推荐文档
4个迭代从批量交付到持续交付转型
券商互联网运维的探索和实践
机器读心术自然语言处理
爱奇艺在 Iceberg 落地相关性能优化与实践
DevOps、DevSecOps、AIOps、DataOps、MLOps 、FinOps傻傻分不清楚
开发运维开发一路走来的收获与感悟