Будет ли такая хранимая процедура вызывать тупик? - PullRequest
0 голосов
/ 04 июня 2010

Я использую SQL Server 2008 Enterprise. Мне интересно, вызывает ли эта хранимая процедура взаимоблокировку, если выполняется несколькими потоками одновременно? Другой вопрос: лучше ли мы определять начало и конец транзакции внутри хранимой процедуры или определять начало и конец транзакции из кода клиента (например, кода ADO.Net)?

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  

спасибо заранее, George

Ответы [ 2 ]

2 голосов
/ 04 июня 2010

Единственный надежный способ ответить на ваш вопрос - запустить свои собственные стресс-тесты

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

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

   DELETE FooTable WHERE  Param1 = @Param1

В зависимости от точного определения таблицы и доступных индексов (которые вы оставили без ответа).

...