Подскажите, как блокировать таблицы в MS SQL
От: beginner  
Дата: 14.02.02 10:25
Оценка:
Конкретно, как сделать так, чтобы пока крутится транзакция:
BEGIN TRANSACTION Trans1
DECLARE @ID1 int
SELECT @ID1 = [ID] FROM Table1 WHERE ...
IF NOT (@ID IS NULL)
INSERT INTO Table2 VALUES (@ID,...)
COMMIT TRANSACTION Trans1

В Table1 никто ничего записать не смог, и как блокировка потом снимается? Заранее спасибо!
Re: Подскажите, как блокировать таблицы в MS SQL
От: Lexey Россия  
Дата: 14.02.02 11:37
Оценка:
Здравствуйте beginner, Вы писали:

B>Конкретно, как сделать так, чтобы пока крутится транзакция:

B>BEGIN TRANSACTION Trans1
B>DECLARE @ID1 int
B>SELECT @ID1 = [ID] FROM Table1 WHERE ...
B>IF NOT (@ID IS NULL)
B>INSERT INTO Table2 VALUES (@ID,...)
B>COMMIT TRANSACTION Trans1

B>В Table1 никто ничего записать не смог, и как блокировка потом снимается? Заранее спасибо!


Попробуй так:
BEGIN TRANSACTION Trans1
DECLARE @ID1 int
SELECT @ID1 = [ID] FROM Table1 WITH TABLOCK HOLDLOCK WHERE ...
IF NOT (@ID IS NULL) 
INSERT INTO Table2 VALUES (@ID,...)
COMMIT TRANSACTION Trans1


Только зачем тебе Table-level lock, если у тебя всего одна запись в транзакции участвует?
Re[2]: Подскажите, как блокировать таблицы в MS SQL
От: beginner  
Дата: 14.02.02 12:10
Оценка:
L>Только зачем тебе Table-level lock, если у тебя всего одна запись в транзакции участвует?

Во вторую таблицу пихаются данные в зависимости от результатов выборки из первой таблицы. Если выборка из первой была сделана, сразу после этого кто-то изменил данные (например удалил строку с выбранным до этого ID)
то во вторую могут быть записаны неверные результаты. Или я что-то не понимаю?
Re[3]: Подскажите, как блокировать таблицы в MS SQL
От: alexm1202 Россия  
Дата: 14.02.02 13:21
Оценка:
Здравствуйте beginner, Вы писали:

L>>Только зачем тебе Table-level lock, если у тебя всего одна запись в транзакции участвует?


B>Во вторую таблицу пихаются данные в зависимости от результатов выборки из первой таблицы. Если выборка из первой была сделана, сразу после этого кто-то изменил данные (например удалил строку с выбранным до этого ID)

B>то во вторую могут быть записаны неверные результаты. Или я что-то не понимаю?

Ну так и блокируй только те записи, которые попадают в выборку. Зачем же всю таблицу блокировать?

BR, Alex.
BR, Alex.
Re[4]: Подскажите, как блокировать таблицы в MS SQL
От: beginner  
Дата: 14.02.02 13:28
Оценка:
A>Ну так и блокируй только те записи, которые попадают в выборку. Зачем же всю таблицу блокировать?
ОК, спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.