У меня есть пять небольших баз данных в одном экземпляре SQL Server 2008. Базы данных связаны (по бизнес-сущности, но не по данным), поэтому я хотел бы объединить их в единую базу данных и предоставить каждой свою собственную схему в этой базе данных.
На самом деле, я бы хотел, чтобы основная база данных сохраняла dbo
схема. Первоначально я начал с создания схем в основной базе данных, затем написал сценарии таблиц в первой базе данных, которую я хочу переместить, чтобы создать структуру, а затем выполнил запросы вставки / выбора для переноса данных. Я согласен с этим, но это требует времени, и я еще даже не дошел до хранимых процедур. Кроме того, одна из баз данных полагается на идентификаторы записей, и простое выполнение вставки / выбора отбросит их.
Конечно, есть более простой способ сделать это.
Я не администратор баз данных, но мне комфортно работать с запросами и тому подобным в SSMS. Я работаю на сервере разработки, и я единственный, кто обновляет данные, поэтому я всегда могу восстановить данные с рабочего сервера, если что-то пойдет не так. Любые указатели будут очень признательны.
Я нашел решение и собираюсь опубликовать его здесь на случай, если кто-то еще будет искать это в будущем. Я не могу сказать, что это лучший способ сделать это, но у меня он сработал и был относительно безболезненным. Я также заранее сообщу, что создал новые схемы в первичной базе данных, когда впервые задал этот вопрос (неделю или две назад), поэтому я, честно говоря, не знаю, нужен ли этот шаг.
Я повторил эту процедуру для каждой базы данных.
Создал уникальное имя схемы для базы данных.
Выполните следующий запрос для каждой таблицы в базе данных:
ALTER SCHEMA [new_schema_name] TRANSFER [table_name];
Использовал SSMS для генерации CREATE
сценарии для всех представлений, хранимых процедур, триггеров и функций. (К счастью, у меня их было мало, так что все прошло быстро.) Мне действительно пришлось добавить имя схемы ко всем ссылкам на таблицы (например, [dbo].[table_name]
изменился на [new_schema_name].[table_name]
но поиск и замена сделали это быстро и легко.
Использовал мастер импорта и экспорта SQL Server для экспорта таблиц из базы данных в первичную базу данных.
Прогнал 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]
Таблица в новой базе данных не может существовать до запуска оператора, но она перенесет данные.