Назад | Перейти на главную страницу

Объединение нескольких баз данных в единую базу данных с несколькими схемами в SQL Server 2008

У меня есть пять небольших баз данных в одном экземпляре SQL Server 2008. Базы данных связаны (по бизнес-сущности, но не по данным), поэтому я хотел бы объединить их в единую базу данных и предоставить каждой свою собственную схему в этой базе данных.

На самом деле, я бы хотел, чтобы основная база данных сохраняла dbo схема. Первоначально я начал с создания схем в основной базе данных, затем написал сценарии таблиц в первой базе данных, которую я хочу переместить, чтобы создать структуру, а затем выполнил запросы вставки / выбора для переноса данных. Я согласен с этим, но это требует времени, и я еще даже не дошел до хранимых процедур. Кроме того, одна из баз данных полагается на идентификаторы записей, и простое выполнение вставки / выбора отбросит их.

Конечно, есть более простой способ сделать это.

Я не администратор баз данных, но мне комфортно работать с запросами и тому подобным в SSMS. Я работаю на сервере разработки, и я единственный, кто обновляет данные, поэтому я всегда могу восстановить данные с рабочего сервера, если что-то пойдет не так. Любые указатели будут очень признательны.

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

Я повторил эту процедуру для каждой базы данных.

  1. Создал уникальное имя схемы для базы данных.

  2. Выполните следующий запрос для каждой таблицы в базе данных:

    ALTER SCHEMA [new_schema_name] TRANSFER [table_name];

  3. Использовал SSMS для генерации CREATE сценарии для всех представлений, хранимых процедур, триггеров и функций. (К счастью, у меня их было мало, так что все прошло быстро.) Мне действительно пришлось добавить имя схемы ко всем ссылкам на таблицы (например, [dbo].[table_name] изменился на [new_schema_name].[table_name] но поиск и замена сделали это быстро и легко.

  4. Использовал мастер импорта и экспорта SQL Server для экспорта таблиц из базы данных в первичную базу данных.

  5. Прогнал CREATE скрипты и удалил старую базу данных.

Что касается идентификаторов, есть инструкция для установки идентификатора. Я верю, что перепечатал личность. Я второй комплект redgate compare / data cpare - rock.

Я не понимаю, зачем вы это делаете. Это позволит вам сделать резервную копию и восстановить все объекты одновременно. Вам также придется реорганизовать код вашего приложения. Какие преимущества вы видите в этом?

Посмотри на Сравнение SQL RedGate. Вероятно, он сможет справиться с тем, что вы ищете, или, по крайней мере, приблизить вас. Это не бесплатно, но вы можете оценить его, чтобы увидеть, будет ли он работать или нет. IMHO это стоит $ (как и все их инструменты).

Недавно мне пришлось (выбрать) объединить две небольшие базы данных, которые не имели значимого перекрытия, в одну базу данных. Целевая таблица в целевой базе данных не существовала до запроса.

Я сделал что-то похожее на то, что описано в ответе OMG Ponies

SELECT * INTO [NEW_DATABASE].dbo.[TABLE]
FROM [OLD_DATABASE].dbo.[TABLE]

Поскольку существует только один экземпляр SQL Server и при условии отсутствия перекрытия, вы можете использовать:

SELECT * 
  INTO [NEW_DATABASE].dbo.[TABLE]
  FROM [OLD_DATABASE].dbo.[TABLE]

Таблица в новой базе данных не может существовать до запуска оператора, но она перенесет данные.