Тупик при вставке в таблицу sql server с нескольких машин - PullRequest
0 голосов
/ 08 марта 2011

У меня возникла тупиковая ситуация при вставке записей в таблицу sql с нескольких машин (более 5 машин).Я запускаю следующий SP с нескольких компьютеров одновременно и получаю взаимоблокировку.

create proc InsertDocuments (@folderId int, @entryIdTable EntryIdTable readonly)  
  begin tran
    insert into [transaction] (transaction_date) values (CURRENT_TIMESTAMP); 

    select @transactionId = SCOPE_IDENTITY();

    insert into document with (TABLOCK) (entry_id, transaction_id)  select entry_id, @transactionId from @entryIdTable ;

    insert into folder_document with (TABLOCK) (source_folder_id, document_id) select @folderId , document_id from document where transaction_id = @transactionId;
  commit

Таблица документов имеет первичный ключ document_id, который также является столбцом идентификации.Transaction_id в таблице транзакций также является столбцом идентификаторов.EntryIdTable - это определенный пользователем тип таблицы.

Любой ввод будет высоко оценен.


Бибек Давади

1 Ответ

0 голосов
/ 19 января 2012

Вот проблема: «Указание подсказки TABLOCK для таблицы, которая является целью инструкции INSERT, имеет тот же эффект, что и указание подсказки TABLOCKX. Для таблицы установлена ​​исключительная блокировка».

http://msdn.microsoft.com/en-us/library/ms174335.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...