2010-06-19 37 views
1

我正在使用SQL Server 2008 Enterprise。並使用ADO.Net + C#+淨3.5 + ASP.Net作爲客戶端來訪問數據庫。當我訪問SQL Server 2008表時,我總是從我的C#+ ADO.Net代碼中調用存儲過程。我的問題是,如果我沒有任何事務控制(我的意思是開始/結束事務)從我的客戶端C#+ ADO.Net代碼,並且我也沒有任何事務控制(我的意思是開始/結束事務)在SQL存儲過程代碼中。那麼我的問題是,每個插入/刪除/更新/選擇語句將作爲一個單獨的事務?那是對的嗎?例如,在以下存儲過程中,刪除/ insert/select將用作3個單一事務?SQL Server 2008中的事務問題

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 

回答

4

然後我的問題是,每個單 插入/刪除/更新/ Select語句 將作爲一個單一的交易?

是的,沒有明確的事務控制,每個SQL語句將被包裝在它自己的事務中。單個語句保證作爲一個整體來執行或不作爲一個整體。通常read committed

單語句將在當前transaction isolation level運行。所以它不會閱讀其他報表提交的修改,但不可重複讀取或幻像值可能受到影響。

+0

謝謝Andomar!問題回答了! – George2 2010-06-19 14:08:23

1

如果你不處理事務,然後每個語句將是獨立的,並可能與運行在同一時間在存儲過程干擾其他用戶。