Điều này sẽ giải thích một chút. Những gì tôi đã làm là tạo ra một hàng đợi thông báo tùy chỉnh cụ thể trong SQL Server 2005. Tôi có một bảng với các thông điệp có chứa dấu thời gian cho cả sự thừa nhận và hoàn thành. Các thủ tục lưu trữ mà người gọi thực hiện để có được thông báo tiếp theo trong hàng đợi của họ cũng thừa nhận thông báo. Càng xa càng tốt. Vâng, nếu hệ thống đang trải qua một số lượng lớn các giao dịch (hàng ngàn mỗi phút), không phải là nó có thể cho một thông điệp được thừa nhận bởi một thực hiện các thủ tục được lưu trữ trong khi khác được chuẩn bị để chính nó? Hãy để tôi giúp bằng cách hiển thị mã SQL của tôi trong proc lưu trữ:Làm thế nào để bạn khóa bảng trong SQL Server 2005, và tôi thậm chí nên làm điều đó?
--Grab the next message id
declare @MessageId uniqueidentifier
set @MessageId = (select top(1) ActionMessageId from UnacknowledgedDemands);
--Acknowledge the message
update ActionMessages
set AcknowledgedTime = getdate()
where ActionMessageId = @MessageId
--Select the entire message
...
...
Trong đoạn mã trên, không thể khác stored procedure chạy cùng một lúc có được cùng một id và cố gắng để thừa nhận nó cùng một lúc? Tôi có thể (hoặc tôi nên) thực hiện một số loại khóa để ngăn chặn một proc được lưu trữ từ thừa nhận thông báo rằng proc lưu trữ khác là truy vấn?
Chà, điều này có ý nghĩa gì không? Hơi khó để đặt vào các từ ...
bạn có thể muốn gắn thẻ lại để thay đổi "tốt nhất" thành "thực hành tốt nhất" thường được sử dụng hơn – martinatime