2010-06-19 3 views
1

Я использую SQL Server 2008 Enterprise. И используя ADO.Net + C# + .Net 3.5 + ASP.Net в качестве клиента для доступа к базе данных. Когда я обращаюсь к таблицам SQL Server 2008, я всегда вызываю хранимую процедуру из кода C# + ADO.Net.вопрос транзакции в SQL Server 2008

Мой вопрос в том, что у меня нет управления транзакциями (я имею в виду начальную/конечную транзакцию) из кода моего клиента C# + ADO.Net, и у меня также нет управления транзакциями (я имею в виду транзакцию начала/конца) в коде хранимой процедуры sql. Тогда мой вопрос: каждый отдельный оператор Insert/Delete/Update/Select будет действовать как одна транзакция? Это верно? Например, в следующей процедуре хранилища delete/insert/select будет действовать как 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 

ответ

4

Тогда мой вопрос, каждый отдельный Insert/Delete/Update/Select заявление будет выступать в качестве одной транзакции?

Да, без явного контроля транзакций каждый оператор SQL будет завернут в свою транзакцию. Единый оператор гарантированно будет выполняться в целом или сбой в целом.

Единичные заявления будут работать под током transaction isolation level: обычно read committed. Поэтому он не будет считывать незафиксированные изменения из других операторов, но может пострадать от неповторяющихся чтений или фантомных значений.

+0

Спасибо Andomar! Вопрос ответил! – George2

1

Если вы не обрабатывать транзакции, то каждое заявление будет независимым и может создавать помехи другим пользователям, работающих под управлением хранимой процедуры в то же время.

Смежные вопросы