|
Блокировка таблиц транзакцией, чтоб ей жизни небыло!
|
|||
---|---|---|---|
#18+
MS SQL 7.0+Delphi5+ADO Коллеги, помогите плиз. Суть проблемы в следующем: Имеются 2 таблицы (Заголовки документов, детализация документов) Tab1(ID int, DocDescr char(15)), Tab2(Link_ID, DocDet char(20)). Связаны по полям ID-Link_ID. ID-автоинкримент. Некоторые записи из этих таблиц необходимо перенести в аналогичные (назовем их Tab1_1 и Tab2_1). Тело проседуры: CREATE PROCEDURE Transfer(@ADocID int) AS DECLARE @NewRefID int BEGIN TRAN INSERT Tab1_1 (DocDescr) SELECT DocDescr FROM Tab1 WHERE Tab1.ID=@ADocID SET @NewRefID=(SELECT MAX(ID) FROM Tab1_1) INSERT Tab2_1 (Link_ID,DocDet) SELECT Link_ID=@NewRefID, DocDet=Tab2.DocDet FROM Tab2 WHERE Tab2.Link_ID=@ADocID COMMIT TRAN Пользователь на форме отмечает в гриде необходимые накладные, а затем в цикле в ADOStoredProc передается ID перемещаемого документа. Так вот, во время этого циклического переноса Tab1_1 и Tab2_1 блокируются так, что из них даже не выполняется СЕЛЕКТ в аналайзере: "Your transaction (process ID #89) was deadlocked with another process and has been chosen as the deadlock victim. Rerun your transaction." Не говоря уже о попытках других пользователей сделать перемещение. Я, конечно упростил стуктуру таблиц. Там еще триггера висят- в общем один документ переносится секунд 10-15. Как сделать так, чтобы не ругалась, а? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2001, 12:53 |
|
|
start [/forum/topic.php?fid=46&fpage=3586&tid=1827162]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
others: | 260ms |
total: | 368ms |
0 / 0 |