Tôi hỏi câu hỏi này vì thỉnh thoảng tôi bị bế tắc mà tôi không hiểu.Khi nào là bế tắc không phải là bế tắc?
Đây là kịch bản:
Stored Procedure mà cập nhật bảng A:
UPDATE A
SET A.Column = @SomeValue
WHERE A.ID = @ID
Stored Procedure mà chèn vào một #temp bảng temp:
INSERT INTO #temp (Column1,Column2)
SELECT B.Column1, A.Column2
FROM B
INNER JOIN A
ON A.ID = B.ID
WHERE B.Code IN ('Something','SomethingElse')
tôi thấy rằng có thể có thể là một sự chờ đợi khóa nhưng tôi không thấy làm thế nào một bế tắc sẽ xảy ra, tôi thiếu một cái gì đó hiển nhiên?
EDIT:
Các SPs mà tôi đã gõ ở đây rõ ràng là đơn giản hóa các phiên bản nhưng tôi đang sử dụng các cột có liên quan. Cấu trúc của cả hai bảng sẽ là:
CREATE TABLE A (ID IDENTITY
CONSTRAINT PRIMARY KEY,
Column VARCHAR (100))
CREATE TABLE B (ID IDENTITY
CONSTRAINT PRIMARY KEY,
Code VARCHAR (100))
'cập nhật' đang chờ' chèn vào' để kết thúc và 'chèn vào' đang chờ' cập nhật' kết thúc? Cả hai chờ người khác kết thúc! –
Nếu cả Bản cập nhật và Phụ trang đều chống lại cùng một bảng, trừ khi câu lệnh Chèn cố gắng đặt khóa độc quyền trên TẤT CẢ các bảng có liên quan và không chỉ trên #temp một số – Gixonita
http://www.codinghorror.com/blog/2008/ 08/deadlocked.html –