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

Брави за редове - ръчно използване

Подходът, който бих препоръчал, е да има поле в записа по линията на, което показва дали записът се обработва или не. След това имплементирайте sproc "четене следващ от опашката", който прави следното, за да гарантира, че няма 2 процеса да вземат един и същ запис:

BEGIN TRANSACTION

-- Find the next available record that's not already being processed.
-- The combination of UPDLOCK and READPAST hints makes sure 2 processes don't 
-- grab the same record, and that processes don't block each other.
SELECT TOP 1 @ID = ID
FROM YourTable WITH (UPDLOCK, READPAST)
WHERE BeingProcessed = 0

-- If we've found a record, set it's status to "being processed"
IF (@ID IS NOT NULL)
    UPDATE YourTable SET BeingProcessed = 1 WHERE ID = @ID

COMMIT TRANSACTION

-- Finally return the record we've picked up
IF (@ID IS NOT NULL)
    SELECT * FROM YourTable WHERE ID = @ID

За повече информация относно тези таблични подсказки вижте MSDN



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Проблем със SSIS Неуспешно дешифриране на защитен XML възел

  2. Разлика между sys.objects, sys.system_objects и sys.all_objects в SQL Server

  3. как да създадете XML схема от съществуваща база данни в SQL Server 2008

  4. Въведение в защитата на ниво ред в SQL Server

  5. Ограничението на външния ключ може да причини цикли или множество каскадни пътища?