Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Khóa hàng - sử dụng chúng theo cách thủ công

Cách tiếp cận mà tôi khuyên dùng là có một trường trong bản ghi dọc theo các dòng của trường đó cho biết liệu bản ghi có đang được xử lý hay không. Sau đó, triển khai chương trình "đọc tiếp theo từ hàng đợi" thực hiện như sau, để đảm bảo không có 2 quy trình nào nhận cùng một bản ghi:

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

Để biết thêm thông tin về các gợi ý bảng này, hãy xem 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. 2 cách tạo bảng trên máy chủ được liên kết bằng T-SQL

  2. Nhận chuỗi con trong SQL Server

  3. Cách lấy Bản ghi riêng biệt từ một bảng trong SQL Server - Hướng dẫn sử dụng SQL Server / TSQL 112

  4. Làm cách nào để di chuyển một bảng vào một lược đồ trong T-SQL

  5. Đầu tiên mã khung thực thể - Thay đổi đối chiếu cột bảng