Сценарии генерации SQL Server с вставкой удостоверения

При создании сценариев базы данных я создаю сценарии для переноса данных в другую среду. Есть ли параметр в генерации скрипта, который я могу включить для автоматического включения/выключения IDENTITY_INSERT, чтобы мне не приходилось вручную просматривать каждую таблицу в сгенерированном скрипте и устанавливать его? Я использую SSMS, и я хотел бы сделать это через SSMS.

Вот что я получаю:

INSERT my_table (my_table_id, my_table_name) VALUES (1, 'val1');
INSERT my_table (my_table_id, my_table_name) VALUES (2, 'val2');

Вот что я хочу:

SET IDENTITY_INSERT my_table ON
INSERT my_table (my_table_id, my_table_name) VALUES (1, 'val1');
INSERT my_table (my_table_id, my_table_name) VALUES (2, 'val2');
SET IDENTITY_INSERT my_table OFF

person Adam Levitt    schedule 02.10.2012    source источник


Ответы (2)


Вы не сказали, какой инструмент вы используете для создания своих скриптов, но если у вас есть такой инструмент, как Red-Gate Data Compare, он будет генерировать эти операторы для вас, если вы включите в сравнение поле автоинкремента. Я не знаю, есть ли у SSMS такая возможность.

Если у вас есть выпуск Visual Studio Premium или Ultimate, у вас также есть доступ к DBPro (Database Professional), в котором есть возможность сравнения и синхронизации данных. Я полагаю, что это также сгенерирует операторы IDENTITY_INSERT для вас.

person Randy Minder    schedule 02.10.2012
comment
Я использую опцию Generate Scripts... внутри SSMS. Есть ли что-то внутри SSMS для этого? - person Adam Levitt; 02.10.2012
comment
Ok. Я не верю, что SSMS дает вам возможность сделать это. Я просто смотрел и не видел ни одного. - person Randy Minder; 02.10.2012
comment
Я понял, как много. Спасибо. Это позор. - person Adam Levitt; 02.10.2012

Я знаю, что это старый вопрос, но принятый ответ и комментарии к принятому ответу не совсем верны в отношении SSMS.

При использовании задачи создания скриптов в Sql Server Management Studio (SSMS) для создания скриптов с данными операторы set identity_insert будут включены для таблиц, содержащих столбец идентификаторов.

В проводнике объектов: Задачи -> Создать скрипты -> [Все таблицы или выбранные таблицы] -> Дополнительно -> [Схема с данными или данные]

  • Если в таблице для скрипта данных нет столбца со свойством identity , операторы set identity_insert не будут генерироваться.

  • Если в таблице для скрипта данных есть столбец со свойством identity , будут сгенерированы операторы set identity_insert.

Протестировано и подтверждено с помощью SSMS 2008 и SSMS 2012.

В ситуации OP я предполагаю, что в исходной таблице не было установлено свойство удостоверения для my_table_id в исходной таблице, но свойство удостоверения было установлено для my_table_id в таблице назначения.

Чтобы получить желаемый результат, измените таблицу на данные скрипта, чтобы иметь my_table_id, чтобы иметь свойство удостоверения.

В этой статье подробно описываются шаги для этого (без использования конструктора в SSMS): Добавление или удаление свойства удостоверения для существующего столбца SQL Server — Грег Робидоукс

  • Создайте новый столбец со свойством удостоверения

  • Перенесите данные из существующего столбца идентификатора в новый столбец.

  • Отбросьте существующий столбец идентификатора.

  • Переименуйте новый столбец в исходное имя столбца.

person SqlZim    schedule 25.12.2016