Эквивалент всей базы данных SET IDENTITY_INSERT OFF - PullRequest
1 голос
/ 23 октября 2008

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

Однако, поскольку оригинальный скрипт содержал

SET IDENTITY_INSERT [Table] OFF

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

Ответы [ 3 ]

5 голосов
/ 23 октября 2008

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

0 голосов
/ 23 октября 2008

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

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

0 голосов
/ 23 октября 2008

Я считаю, что 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;
...