У меня есть таблица шале, на которую ссылается шале в учетной записи ...
CHALET
------
int ChaletId PK
int Berth
ACCOUNT
-------
int AccountId PK
int ChaletId FK
Шале начинаются без ссылки. Когда пользователь покупает шале, код должен найти шале без ссылок и назначить его вновь созданной учетной записи. Я думаю, что возвращенное шале должно иметь UPDLOCK до тех пор, пока учетная запись, которая будет ссылаться на него, не будет зафиксирована, чтобы не дать одновременному покупателю назначить одно и то же шале.
Как мне написать SELECT, который выбирает шале? Я думал что-то вроде этого ..
SELECT * FROM CHALET WITH (UPDLOCK) c
LEFT JOIN ACCOUNT a
ON c.ChaletId = a.ChaletID
WHERE a.ChaletID is null
AND Berth = 4
Я думаю, что проблема в том, что если этот запрос выполняется одновременно, тогда один запрос может заблокировать половину одной таблицы, а другой может заблокировать другую половину, и гарантируется мертвая блокировка. Это можно обойти? Например, можно ли заблокировать выбранные строки шале в тех же порядках?
Ура, Ян.