sql >> Databasteknik >  >> RDS >> Sqlserver

t-SQL sammansatt uttalande orsakar dödläget, någon aning om varför?

Antingen måste du ha fler lås eller färre.

Det enklaste svaret är att välja NOLOCK (bästa prestanda) eller TABLOCKX (konsistens utan att behöva tänka).

Om du inte kan använda with (nolock) på grund av konsistenskrav kan du lägga till with (tablockx) .Detta innebär i praktiken att endast en tråd kan köra liknande uttalanden åt gången - det kommer inte att finnas någon samtidighet.

Alternativet är att analysera dina krav mycket mer i detalj, vilket inte kan göras utan att du förstår varför du uppdaterar tabellen, vad data är till för etc.

Till exempel, måste detta uttalande verkligen vara med i transaktionen? Det luktar hushållning:

  DELETE FROM [dbo].[t_Log_2] 
  WHERE [idtm]<'2011-03-12 08:41:57';

Om du tar bort det från transaktionen och lägger det i en separat batch kan du upptäcka att problemen försvinner.




  1. Skapa utlösare för att infoga i en annan tabell

  2. Använda MySQL GeoSpatial datatyper i .NET

  3. Bash-skript för att infoga värden i MySQL

  4. installera både mysql och mysqlnd på ubuntu 12.04