Создание копии базы данных - Сбой из-за использования спецификации «Идентичность» - PullRequest
0 голосов
/ 30 января 2012

Я пытался выяснить, как правильно приспосабливаться к обработке столбцов «Идентичность» при создании сценария для повторного создания базы данных.

Первоначальная причина, по которой мне нужно сгенерировать скрипт для этого, заключается в том, что мне нужно «понизить» базу данных SQL до более старой версии. Я знаю, что все в базе данных (v10.5) совместимо с более старой версией (v10.0). Проблема, с которой я сталкиваюсь, заключается в том, что из 3 различных методов копирования базы данных всегда происходит сбой из-за того, что она не может поддерживать исходные поля идентификаторов (которые являются идентичными).

Каждая моя таблица имеет самый первый столбец ID: Int = PK & Identity. У меня также есть много случаев, когда таблица в этом столбце не является идеально последовательной, например, 1, 2, 3, 5, 8, 12, 13 и т. Д. Это просто потому, что эти записи были удалены в прошлом. Но кажется, что невозможно заново вставить оригинальные идентификационные номера в том же порядке, в котором они были ...

Так как мне скопировать (без резервного копирования / восстановления) базу данных полностью с сервера А на сервер Б? ПРИМЕЧАНИЕ. Я могу подключиться к обеим базам данных на обоих серверах из Management Studio. Кроме того, целевой сервер не мой, это общая размещенная БД, и у меня есть доступ только к моей базе данных. У меня нет прав на изменение настроек сервера назначения.

Я пробовал следующее:

  • Создать сценарий для всей базы данных
  • Опция экспорта базы данных
  • Резервное копирование / восстановление базы данных - происходит сбой из-за несовпадения версий

Я предполагаю, что мне, возможно, придется временно «отключить» спецификацию идентификации для всех таблиц, вставить данные, а затем снова включить идентификацию. Но Я ужасно пишу сценарии для манипулирования структурой базы данных. Данные самостоятельно, я могу сделать. Но, манипулируя структурой базы данных, я настолько привык к использованию инструментов для этого, что я даже не потратил время на работу со сценариями - и, кроме этого конкретного сценария, надеюсь, что мне тоже никогда не придется учиться.

1 Ответ

1 голос
/ 31 января 2012

Я на самом деле понял это.Я уже знал, что должен быть способ временно отключить спецификацию идентификации, но решение было немного другим.Вместо «отключения» и «повторного включения» спецификации идентификатора есть другая команда (как в комментарии выше) под названием IDENTITY_INSERT, которая при включении позволяет вставлять значения в поле идентификатора - и вам нужно убедиться, что она получаетвыключил тоже.Переключатель IDENTITY_INSERT для каждого сеанса соединения, поэтому он не влияет на другие сеансы.Пока IDENTITY_INSERT включено, вы можете вставлять записи с определенным значением для этого поля идентификации - при условии, что оно все еще находится в пределах ограничений первичного ключа.

Фактическим решением было НЕ писать сценарий с SET IDENTITY_INSERT MyTableName ON, а точнее в утилите экспорта базы данных (в SQL Management Studio), при выборе таблиц выберите все таблицы и выберите расширенный параметр для использования IDENTITY_INSERT.

...