В моем вечныйсага для вставки 1,4 миллиона строк данных из сценария SQL я написал базовое приложение WinForms, которое берет каждую строку сценария и выполняет ее индивидуально.
Однако, поскольку исходный сценарий содержал
SET IDENTITY_INSERT [Table] OFF
а SET - это общесессионная команда, этот параметр теряется при каждом вызове SQL, что означает, что каждая строка дает сбой. Есть ли способ отключить IDENTITY_INSERT для всей таблицы, для всей базы данных, чтобы я мог выполнять эти отдельные вызовы без их сбоя? Или, может быть, я могу сказать ему игнорировать спецификацию личности, добавив команду в каждую строку?





ОБЪЕМНАЯ ВСТАВКА вам не подойдет? Или мастер импорта / экспорта SQL Server (здесь или здесь)? Я знаю, что импорт / экспорт может отключить вставку идентификационной информации для всего импорта. Я уверен, что вы сможете сделать это незадолго до BULK INSERT
В итоге мне пришлось преобразовать свой SQL-скрипт в плоский файл с разделителями табуляции, а затем использовать bcp для его импорта. Это было намного сложнее, чем должно было быть!
Я считаю, что 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;
Будет ли что-то еще получать доступ / вставлять в таблицу, пока выполняется 1,4 миллиона заданий вставки.
Если нет, можно просто отключить идентификацию в столбце PK на время выполнения задания?
Вы также можете посмотреть на утилиту bcp для этого, она разработана специально для этой задачи. msdn.microsoft.com/en-us/library/ms162802.aspx Существует опция командной строки для bcp, позволяющая переопределить столбец идентификаторов указанным файлом из ваших данных импорта.