Изменить схему в базе данных SQL Server 2008 R2 Express - PullRequest
0 голосов
/ 07 июля 2011

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

У меня есть два файла резервных копий базы данных SQL Server 2008 R2 с общего хоста: database-1.bak и database-2.bak. Каждая из этих баз данных была настроена на разных учетных записях общего хостинга на одном и том же общем сервере с одним пользователем базы данных каждый (с именами «database-1» и «database-2» соответственно). Структура баз данных идентична, а данные - нет. Database-1 имеет содержимое, database-2 пусто. Я хочу скопировать все данные из database-1 в database-2, а затем повторно загрузить database-2 обратно на общий хост. Тогда две базы данных должны быть абсолютно одинаковыми, но database-1 должна принадлежать схеме database-1, а database-2 - схеме database-2.

Я вошел в SQL Server Management Studio Express 2008 R2 как sa и восстановил эти базы данных, поэтому у меня теперь есть две базы данных, одна из которых содержит множество таблиц, например, например. database-1.tblTest, database-1.tblTest2 и т. Д .; а другой - с множеством таблиц, называемых, например, database-2.tblTest, database-2.tblTest2 и т. Д. Таким образом, все таблицы в database-1 «принадлежат» схеме database-1 (имена таблиц начинаются с database-1.), а все таблицы в database-2 являются ' принадлежит схеме database-2 (к именам таблиц добавляется database-2.).

Я попытался щелкнуть правой кнопкой мыши database-1 и выбрать Tasks > Export Data и экспортировать его в database-2. Странно, что, когда он автоматически отображает объекты для экспорта, он делает это:

database-1.tblTest (on 'source' database-1) -> database-1.tblTest (on 'destination' database-2).  

Это странно, потому что я надеюсь, что он сделает это вместо этого:

database-1.tblTest (on 'source' database-1) -> database-2.tblTest (on 'destination' database-2). 

Я хотел бы надеяться, что таблицы в базе данных-2 сохранят владельца database-2.. Если я сопоставлю каждую из таблиц следующим образом:

database-1.tblTest -> database-2.tblTest

Экспорт не выполнен. Если я сохраню отображение по умолчанию (database-1.tblTest -> database-1.tblTest), оно выполнится успешно, но тогда у меня будет целая загрузка таблиц в database-2, которые принадлежат схеме database-1.

Это сейчас, где я нахожусь. Database-1 такое же, как было, когда я его восстановил. Но database-2 теперь имеет набор таблиц с добавлением database-2. и тот же набор таблиц с добавлением database-1..

Это проблема, потому что, когда я пытаюсь повторно загрузить database-2 обратно на хост-сервер, он выдает ошибку, потому что схема пытается использовать database-1, который находится на том же сервере, но с другой учетной записью. Поэтому мне нужно, чтобы таблицы в database-2 содержали владельца схемы database-2, но просто заполнялись данными из database-1.

Я попытался выполнить такой запрос, чтобы попытаться изменить схему в моих импортированных таблицах в database-2 с database-1 на database-2:

USE [database-2]
ALTER SCHEMA [database-2] TRANSFER [database-1.tblTest]

Однако это только ошибки:

Сообщение 15151, Уровень 16, Состояние 1, Строка 2
Не удается найти объект «database-1.tableTest», потому что он не существует или у вас нет разрешение.

Я вошел в Management studio как sa, поэтому разрешения не должны быть проблемой.

Может кто-нибудь пролить свет на то, как просто вставить эти данные в database-2 и сохранить владельца схемы таким же?

Любая помощь будет высоко оценена, спасибо!

1 Ответ

5 голосов
/ 07 июля 2011

Ваш синтаксис немного отличается ... потому что вы заключили схему + таблицу в одну квадратную скобку, предполагается, что у вас есть имя таблицы с периодом и в нем.Попробуйте это:

ALTER SCHEMA [database-2] TRANSFER [database-1].[tblTest];

Настоятельно рекомендуем держаться подальше от тире в именах баз данных, схем, объектов и столбцов.Их использование делает квадратные скобки необходимыми и может усложнить многие другие инструменты и сценарии, которые их не ожидают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...