Блокировка стола во время вставки - PullRequest
0 голосов
/ 26 января 2011

У меня есть таблица, которая ожидает 5000 записей для вставки в виде массовой вставки, но я должен выбрать максимальный идентификатор из таблицы для каждого оператора. Я решил написать хранимую процедуру, которая выбирает максимальный идентификатор один раз, иувеличивайте его для каждой записи, чтобы быстро вставить записи, но некоторые другие пользователи могут использовать тот же самый хранимый элемент для вставки, что может привести к конфликту. Как я могу заблокировать таблицу исключительно до завершения вставки с помощью Sp или обычного сценария вставки?

1 Ответ

1 голос
/ 26 января 2011

Как сказал Кассной, вам лучше всего использовать IDENTITY и иметь гораздо менее запутанный и сложный процесс.

Если вы намерены использовать описанный вами процесс, все, что вам нужно, это:

INSERT INTO MyTable WITH (TABLOCK)
(field 1, field2, field3...)
VALUES
(value 1, value 2, value 3...)

Подсказка TABLOCK устанавливает исключительную блокировку таблицы для вставки / обновления (вы также можете использовать TABLOCKX, которая является явной исключительной блокировкой, но не обязательна, за исключением SELECT).

Подсказка TABLOCK также включит минимально регистрируемые вставки, если ваши флаги трассировки установлены правильно, что обычно значительно быстрее, хотя при наличии только 5000 записей вы можете не заметить разницы.

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