.NET开发中的事务处理大比拼 之 SQL和存储过程级别事务
来源:互联网 发布:java xmlencoder 编辑:程序博客网 时间:2024/06/04 08:05
数据库事务是其他事务模型的基础,当一个事务创建时不同数据库系统都有自己的规则。SQL Server默认在自动提交的模式下工作,每个语句执行完后都会立即提交;与此对照的是Oracle需要你包含一个提交语句。但是当一个语句通过OLE DB执行时,它执行完后一个提交动作会被附加上去。例如:
DECLARE @TranName VARCHAR(20);
SELECT @TranName = 'MyTransaction';
BEGIN TRANSACTION @TranName;
GO
USE AdventureWorks;
GO
DELETE FROM AdventureWorks.HumanResources.JobCandidate
WHERE JobCandidateID = 13;
GO
COMMIT TRANSACTION MyTransaction;
GO
或者:
CREATE PROCEDURE Tran1
as
begin tran
set xact_abort on
Insert Into P_Category(CategoryId,Name)values('1','test1')
Insert Into P_Category(CategoryId,Name)values('2','test2')
commit tran
GO
set xact_abort on表示遇到错误立即回滚。
当然你也可以这么写:
CREATE PROCEDURE tran1
as
begin tran
Insert Into P_Category(CategoryId,Name)values('1','test1')
if(@@error<>0)
rollback tran
else
begin
Insert Into P_Category(CategoryId,Name)values('2','test2')
if(@@error<>0)
rollback tran
else
commit tran
end
GO
数据库级别事务有它的优势和限制。
优势:
l 所有的事务逻辑包含在一个单独的调用中。
l 拥有运行一个事务的最佳性能。
l 独立于应用程序。
限制:
l 事务上下文仅存在于数据库调用中。
l 数据库代码与数据库系统有关。
选自《亮剑.NET. .NET深入体验与实战精要》一书 5.4 节。
DECLARE @TranName VARCHAR(20);
SELECT @TranName = 'MyTransaction';
BEGIN TRANSACTION @TranName;
GO
USE AdventureWorks;
GO
DELETE FROM AdventureWorks.HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION MyTransaction;
GO
或者:
CREATE PROCEDURE Tran1
as
begin tran
set xact_abort on
Insert Into P_Category(CategoryId,Name)values('1','test1')
Insert Into P_Category(CategoryId,Name)values('2','test2')
commit tran
GO
set xact_abort on
当然你也可以这么写:
CREATE PROCEDURE tran1
as
begin tran
Insert Into P_Category(CategoryId,Name)values('1','test1')
if(@@error<>0)
rollback tran
else
begin
Insert Into P_Category(CategoryId,Name)values('2','test2')
if(@@error<>0)
rollback tran
else
commit tran
end
GO
数据库级别事务有它的优势和限制。
优势:
l 所有的事务逻辑包含在一个单独的调用中。
l 拥有运行一个事务的最佳性能。
l 独立于应用程序。
限制:
l 事务上下文仅存在于数据库调用中。
l 数据库代码与数据库系统有关。
选自《亮剑.NET. .NET深入体验与实战精要》
0 0
- .NET开发中的事务处理大比拼 之 SQL和存储过程级别事务
- .NET开发中的事务处理大比拼 之 SQL和存储过程级别事务
- .NET开发中的事务处理大比拼 之 ADO.NET级别的事务
- .NET开发中的事务处理大比拼 之 ASP.NET页面级别的事务
- .NET开发中的事务处理大比拼 之 ASP.NET页面级别的事务
- .NET开发中的事务处理大比拼 之 ADO.NET级别的事务
- .NET开发中的事务处理大比拼 之 企业级服务COM+事务
- .NET开发中的事务处理大比拼 之 企业级服务COM+事务
- .NET开发中的事务处理大比拼 之 System.Transactions
- .NET开发中的事务处理大比拼 之 System.Transactions
- .NET开发中的事务处理大比拼
- .NET开发中的事务处理大比拼
- SQL 和存储过程级别的事务及ADO.NET级别的事务
- .NET开发中的事务处理大比拼 —《.NET深入体验与实战精要》
- sql分页存储过程大比拼
- SQL中的存储过程和事务
- sql 存储过程中的事务
- 存储过程 与 SQL Server语句大比拼
- 分析在ASP.NET中运用PlaceHolder控件
- asp.net重写URL
- .net 事务处理的三种方法
- .NET开发中的事务处理大比拼 之 ASP.NET页面级别的事务
- .NET开发中的事务处理大比拼
- .NET开发中的事务处理大比拼 之 SQL和存储过程级别事务
- .NET开发中的事务处理大比拼 之 ADO.NET级别的事务
- .NET开发中的事务处理大比拼 之 企业级服务COM+事务
- .NET开发中的事务处理大比拼 之 System.Transactions
- 您可能不知道的.Net2.0小技巧
- 设置滚动条样式
- FCKEditor使用RequiredFieldValidator验证时必须点击两次的解决办法
- 使用CSS实现圆角Div(无图片)
- 【总结】IE和Firefox的Javascript兼容性总结