Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

A instrução composta t-SQL causa o impasse, alguma ideia do porquê?


Você precisa manter mais bloqueios ou menos.

A resposta mais fácil é ir para NOLOCK (melhor desempenho) ou TABLOCKX (consistência sem ter que pensar).

Se você não pode usar with (nolock) devido aos requisitos de consistência, você pode adicionar with (tablockx) .Isso significará efetivamente que apenas um thread pode executar instruções semelhantes por vez - não haverá concorrência.

A alternativa é analisar seus requisitos com muito mais detalhes, o que não pode ser feito sem entender por que você está atualizando a tabela, para que servem os dados etc.

Por exemplo, essa declaração realmente precisa estar na transação? Cheira a arrumação:
  DELETE FROM [dbo].[t_Log_2] 
  WHERE [idtm]<'2011-03-12 08:41:57';

Se você tirar isso da transação e colocá-lo em um lote separado, poderá descobrir que os problemas desaparecem.