Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

АКТУАЛИЗАЦИЯ + С (ROWLOCK) + CTE

NOLOCK не се отнася за частта от заявката, която препраща към таблицата, която трябва да бъде модифицирана. В инструкциите за актуализиране на SQL Server U-заключете всеки ред за кратко, докато се тества. Това е механизъм за избягване на задънена улица. Предотвратява множество актуализации за всеки S-заключване на ред за четене и след това опит за X-заключване.

Не можете да накарате U-бравите да изчезнат AFAIK. Но можете да намалите броя на U-заключените редове до абсолютния минимум чрез самосъединяване:

update t1
set ...
from T t1 with (rowlock)
where t1.ID in (select TOP 5 ID from T t2 with (nolock) where ... order by ...)

Това добавя малко допълнителни разходи, но ви позволява да използвате NOLOCK за четене.

Обмислете използването на изолация на моментни снимки за четенията. NOLOCK има определени проблеми като произволно прекъсване на заявки.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво представляват ограниченията на базата данни?

  2. Sql Server 2008 географски ограничения за размера на LineString

  3. SSRS връща различни резултати от съхранената процедура

  4. Типове курсори на SQL Server - KEYSET Курсор | Урок за SQL Server / Урок за TSQL

  5. Как да се справяте с множество обекти с помощта на Windows с подробности за Object Explorer в SSMS - SQL Server / TSQL Урок, част 22