Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Горячая тема (более 10 ответов) Как массово заменить в хранимой процедуре TABLOCKX на ROWLOCK (число прочтений - 4508 )
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Как массово заменить в хранимой процедуре TABLOCKX на ROWLOCK
Ответ #15 - 22. Июня 2011 :: 06:03
Печать  
Neo писал(а) 21. Июня 2011 :: 06:21:
В момент выполнения такой команды разумеется не наложится. Но если открыть транзакцию, написать что-то типа from _1SJOURN(rowlock holdlock) where 0=1, то потом при обращении к конкретным строкам в ходе транзакции по идее должны заблокироваться нужные строки. Не экспериментировал,  так что это просто мои мысли.


И еще - собственно хинт относится исключительно к той выборке, к которой он написан.

т.е.
Если ты напишешь сначала
select IDdoc from _1SJourn (rowlock holdlock) where 1=0

а следом
select IdDoc from _1SJourn where IDDoc = :ПроводимыйДокумент

то строка журнала, соответствубющая проводимому документу заблокированная НЕ будет.

PS возможно еще более шизофренические конструкции, и как они будут работать - я не совсем представляю. Нужно ковыряться и проверять. Например, такая:

select Date_Time_IDDoc
From _1SJourn J (rowlock holdlock)
Left Join $ДокументСтроки.ПоступлениеТМЦ D (nolock) on D.IDDoc = J.IDDoc
Where
J.IDDoc = :ПроводимыйДокумент

или даже

select
*
from
(
select J.Date_Time_IDDoc,
J.IDDoc,
$D.Товар Товар
From _1SJourn J (rowlock holdlock)
Left Join $ДокументСтроки.ПоступлениеТМЦ D (rowlock holdlock) on D.IDDoc = J.IDDoc
) J
Where
J.IDDoc = :ПроводимыйДокумент
And J.Товар = :Товар
(когда условия накладываются на внешних уровнях - я вот фиг знает, какие именно строки будут заблокированы. особенно в случае неявных вырождений джойнов из LEFT в INNER).
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать