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

Как да заключите изключително ред, който предотвратява операцията CRUD

BEGIN TRAN

    SELECT 1
    FROM Table
    WITH (XLOCK, ROWLOCK)

COMMIT TRAN

Това ще свърши работа.

РЕДАКТИРАНЕ

Както е отбелязано от други, не можете да заключите ред, за да не бъде прочетен . Единственият начин, който знам за това, е следният:

WITH (UPDLOCK, TABLOCK)

И това предполага, че WITH (NOLOCK) никога не се използва в оператор SELECT (което така или иначе трябва да се избягва).

Тествах това и ще работи, въпреки че TABLOCK трябва да се използва само в крайни случаи. Разбира се, ако се изисква едновременност, това е лошо решение и ще е необходима друга форма на заключване. Един от начините е да актуализирате битова колона „Налично True/False“ и да четете само редове, където Налично =True. Както предложи @gbn, READPAST може да се използва с това.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изпращане на имейли с прикачени файлове в SQL Server (T-SQL)

  2. Как да форматирам число със запетаи в T-SQL?

  3. Subsonic 2.2 Генерирано свойство за SQL Server 2008 Дата

  4. Конкатна стойност на полето към низ в SQL Server

  5. За да стартирате SSIS пакет извън SQL Server Data Tools, трябва да инсталирате Move File to Archive of Integration Services или по-висока