SQL Server 2008 中的事务问题

Posted

技术标签:

【中文标题】SQL Server 2008 中的事务问题【英文标题】:transaction question in SQL Server 2008 【发布时间】:2010-06-19 10:08:58 【问题描述】:

我使用的是 SQL Server 2008 Enterprise。并使用 ADO.Net + C# + .Net 3.5 + ASP.Net 作为客户端访问数据库。当我访问 SQL Server 2008 表时,我总是从我的 C# + ADO.Net 代码中调用存储过程。

我的问题是,如果我的客户端 C# + ADO.Net 代码没有任何事务控制(我的意思是开始/结束事务),我也没有任何事务控制(我的意思是开始/结束事务)在 sql 存储过程代码中。那么我的问题是,每个单独的插入/删除/更新/选择语句都将充当单个事务吗?那是对的吗?例如,在下面的存储过程中,删除/插入/选择将充当 3 个单一事务?

create PROCEDURE [dbo].[FooProc]    
(  
 @Param1 int 
 ,@Param2 int  
 ,@Param3 int  
)    
AS    

DELETE FooTable WHERE  Param1 = @Param1     

INSERT INTO FooTable    
 (  
 Param1  
 ,Param2  
 ,Param3  
  )    
 VALUES    
 (  
 @Param1  
 ,@Param2  
 ,@Param3  
  )    

DECLARE @ID bigint    
 SET @ID = ISNULL(@@Identity,-1)    
 IF @ID > 0    
 BEGIN    
      SELECT IdentityStr FROM FooTable WHERE ID = @ID 
 END 

【问题讨论】:

【参考方案1】:

那么我的问题是,每个单曲 插入/删除/更新/选择语句 将作为一个单一的交易?

是的,如果没有明确的事务控制,每个 SQL 语句都将被包装在自己的事务中。保证单个语句作为一个整体执行或作为一个整体失败。

单个语句将在当前transaction isolation level 下运行:通常为read committed。因此它不会从其他语句中读取未提交的更改,但它可能会遭受不可重复读取或幻像值的影响。

【讨论】:

谢谢安多玛!问题已回答!【参考方案2】:

如果您不处理事务,那么每个语句将是独立的,并且可能会干扰同时运行存储过程的其他用户。

【讨论】:

以上是关于SQL Server 2008 中的事务问题的主要内容,如果未能解决你的问题,请参考以下文章

为啥在事务范围内调用 SQL Server 2008 中的全文搜索失败?

Sql Server 中的大事务,有啥问题吗?

《SQL Server 2008从入门到精通》--20180716

怎样读sql server 2008 事务日志

SQL Server 2008 的双倍同时事务处理

在 SQL Server 2008 R2 事务复制中筛选列数据