Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как заблокировать таблицу до конца выполнения транзакции ?  [new]
randrews
Member

Откуда:
Сообщений: 44
Здравствуйте.
хочу выполнить одинаковый код ОДНОВРЕМЕННО, но, чтоб не возникало deadlock.

begin tran A
	declare @HistEntryNo int
	select @HistEntryNo = max(Num) from TestDeadlockT1 WITH (SERIALIZABLE)
	WAITFOR DELAY '00:00:03'
	insert into TestDeadlockT1(Num) select @HistEntryNo + 1 
commit tran A

Как заблокировать таблицу TestDeadlockT1 так, чтобы до конца tran A никто другой не мог воспользоваться ею.
Основная цель - убрать deadlock.
Думаю, что уровнями блокировок как-то разрулить можно, isolation level всякие может ... Но знаний не хватает, к сожалению.
Помогите, пожалуйста.
1 ноя 11, 14:25    [11533102]     Ответить | Цитировать Сообщить модератору
 Re: Как заблокировать таблицу до конца выполнения транзакции ?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Сделать поле num как identity.
1 ноя 11, 14:27    [11533123]     Ответить | Цитировать Сообщить модератору
 Re: Как заблокировать таблицу до конца выполнения транзакции ?  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
randrews,

Может так?
insert into TestDeadlockT1(Num) 
select max(Num)+1 from TestDeadlockT1
1 ноя 11, 14:29    [11533143]     Ответить | Цитировать Сообщить модератору
 Re: Как заблокировать таблицу до конца выполнения транзакции ?  [new]
randrews
Member

Откуда:
Сообщений: 44
Гавриленко Сергей Алексеевич
Сделать поле num как identity.

Спасибо, Сергей Алексеевич.
К сожалению, этот вариант не пойдет, так как номер используется дальше для других таблиц. А в SQL 2000 вроде нет возможности получить только что вставленную запись типа inserted.
1 ноя 11, 14:36    [11533208]     Ответить | Цитировать Сообщить модератору
 Re: Как заблокировать таблицу до конца выполнения транзакции ?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
randrews
Гавриленко Сергей Алексеевич
Сделать поле num как identity.

Спасибо, Сергей Алексеевич.
К сожалению, этот вариант не пойдет, так как номер используется дальше для других таблиц. А в SQL 2000 вроде нет возможности получить только что вставленную запись типа inserted.
Вы топ 10 вопросов читали? Особенно седьмой?
1 ноя 11, 14:37    [11533229]     Ответить | Цитировать Сообщить модератору
 Re: Как заблокировать таблицу до конца выполнения транзакции ?  [new]
randrews
Member

Откуда:
Сообщений: 44
trew
randrews,

Может так?
insert into TestDeadlockT1(Num) 
select max(Num)+1 from TestDeadlockT1


Спасибо, trew.
По той же причине, что и выше описал - не подойдет. Надо узнать номер
1 ноя 11, 14:37    [11533235]     Ответить | Цитировать Сообщить модератору
 Re: Как заблокировать таблицу до конца выполнения транзакции ?  [new]
randrews
Member

Откуда:
Сообщений: 44
Гавриленко Сергей Алексеевич
randrews
пропущено...

Спасибо, Сергей Алексеевич.
К сожалению, этот вариант не пойдет, так как номер используется дальше для других таблиц. А в SQL 2000 вроде нет возможности получить только что вставленную запись типа inserted.
Вы топ 10 вопросов читали? Особенно седьмой?


Посыпаю голову пеплом.
Извините.
И спасибо.
1 ноя 11, 14:38    [11533247]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить