вопрос транзакции в SQL Server 2008 - PullRequest
1 голос
/ 19 июня 2010

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

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

Ответы [ 2 ]

4 голосов
/ 19 июня 2010

Тогда мой вопрос: каждый оператор вставки, удаления, обновления, выбора будет действовать как отдельная транзакция?в своей собственной транзакции.Одно утверждение гарантированно будет выполнено в целом или не выполнено в целом.

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

1 голос
/ 19 июня 2010

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

...