Эквивалент всей базы данных SET IDENTITY_INSERT OFF

В моей вечной саге о вставке 1,4 миллиона строк данных из сценария SQL я написал базовое приложение WinForms, которое берет каждую строку сценария и выполняет его отдельно.

Тем не менее, потому что оригинальный сценарий содержал

SET IDENTITY_INSERT [Table] OFF

и SET - это сеансовая команда, этот параметр теряется при каждом вызове SQL, что означает сбой каждой строки. Есть ли способ отключить IDENTITY_INSERT для всей таблицы, всей базы данных, чтобы я мог совершать эти отдельные вызовы без сбоев? Или, может быть, я могу сказать ему игнорировать спецификацию идентификации, добавив команду в каждую строку?

3 ответа

Решение

BULK INSERT не подойдет для вас? Или Мастер импорта / экспорта SQL Server ( здесь или здесь)? Я знаю, что импорт / экспорт может отключить вставку идентификатора для всего импорта. Я вполне уверен, что вы можете сделать это непосредственно перед BULK INSERT

Будет ли что-либо еще доступ / вставка в таблицу, пока выполняется задание на 1,4 миллиона вставок.

Если нет, вы могли бы просто отключить Identity в столбце PK на время выполнения задания?

Я полагаю, что IDENTITY INSERT может быть переопределен только одной таблицей за сеанс.

Возможно, вам придется пакетировать по 2 или 300 операторов вставки за раз и предшествовать каждому пакету идентификатором вставки.

поэтому приложение выполнит такой блок....

SET IDENTITY_INSERT [Table] OFF;
INSERT INTO TABLE VALUES (1, 'a');
INSERT INTO TABLE VALUES (2, 'b');
INSERT INTO TABLE VALUES (3, 'c');
INSERT INTO TABLE VALUES (4, 'd');
INSERT INTO TABLE VALUES (5, 'e');
SET IDENTITY_INSERT [Table] ON;
Другие вопросы по тегам