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

Състояние на опашката за процес на SQL Server

Редактиране:

Търсих в Google, за да проверя отговора си:„Обработка на опашки с данни в SQL Server с READPAST и UPDLOCK“. Изминаха години, откакто четох и играх с това решение.

Оригинал:

Ако използвате подсказката READPAST, заключените редове се пропускат. Използвали сте ROWLOCK, така че трябва да избягвате ескалация на заключване. Вие също имате нужда от UPDLOCK, както разбрах.

Така процес 1 заключва 20 реда, процес 2 ще заеме следващите 20, процес 3 отнема редове от 41 до 60 и т.н.

Актуализацията може да бъде написана и така:

UPDATE TOP (20)
    foo
SET
    ProcessorID = @PROCID
FROM
    OrderTable foo WITH (ROWLOCK, READPAST, UPDLOCK)
WHERE
    ProcessorID = 0

Обновяване, октомври 2011 г.

Това може да стане по-елегантно с клаузата OUTPUT, ако имате нужда от SELECT и UPDATE наведнъж.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Не е равно <> !=оператор на NULL

  2. Изпълнете съхранена процедура в друга съхранена процедура в SQL сървър

  3. Може ли ограничение за проверка да се отнася до друга таблица?

  4. Преобразувайте „datetime“ в „smalldatetime“ в SQL Server (T-SQL примери)

  5. Можете ли да имате логика if-then-else в SQL?