Копирование таблиц из одной базы данных в другую в SQL Server
-
06-07-2019 - |
Вопрос
У меня есть база данных под названием foo и база данных под названием bar.У меня есть таблица в foo под названием tblFoobar, которую я хочу переместить (данные и все остальное) в database bar из database foo.Что такое оператор SQL для этого?
Решение
На SQL Server? а на одном сервере базы данных? Используйте именование из трех частей.
INSERT INTO bar..tblFoobar( *fieldlist* )
SELECT *fieldlist* FROM foo..tblFoobar
Это просто перемещает данные. Если вы хотите переместить определение таблицы (и другие атрибуты, такие как разрешения и индексы), вам придется сделать что-то еще.
Другие советы
SQL Server Management Studio " Импорт данных " Задача (щелкните правой кнопкой мыши на имени БД, затем задачи) сделает большую часть этого для вас. Запустите его из базы данных, в которую вы хотите скопировать данные.
Если таблицы не существуют, они будут созданы для вас, но вам, вероятно, придется заново создавать любые индексы и тому подобное. Если таблицы существуют, они добавят новые данные по умолчанию, но вы можете настроить их (изменить сопоставления), чтобы удалить все существующие данные.
Я использую это все время, и это работает довольно хорошо.
Это должно работать:
SELECT *
INTO DestinationDB..MyDestinationTable
FROM SourceDB..MySourceTable
Он не будет копировать содержание, значения по умолчанию или индексы. Созданная таблица не будет иметь кластеризованный индекс.
В качестве альтернативы вы можете:
INSERT INTO DestinationDB..MyDestinationTable
SELECT * FROM SourceDB..MySourceTable
Если ваша таблица назначения существует и пуста. Р>
Если это только одна таблица, то все, что вам нужно сделать, это
- Определение таблицы сценариев
- Создайте новую таблицу в другой базе данных
- Обновляйте правила, индексы, разрешения и тому подобное
- Импорт данных (несколько примеров вставки в уже показаны выше)
Одна вещь, которую вам нужно будет учитывать, - это другие обновления, такие как перенос других объектов в будущем.Обратите внимание, что ваши исходная и целевая таблицы не имеют одинаковых имен.Это означает, что вам также придется вносить изменения, если у вас есть зависимые объекты, такие как представления, хранимые процедуры и другие.
К одному или нескольким объектам вы можете обращаться вручную без каких-либо проблем.Однако, когда обновлений больше, чем просто несколько, сторонние инструменты сравнения оказываются очень кстати.Прямо сейчас я использую Разница в ApexSQL для миграции схемы, но вы не ошибетесь ни с одним другим инструментом.
Сценарий create table
в Management Studio, запустите этот скрипт на панели, чтобы создать таблицу. (Щелкните правой кнопкой мыши таблицу в проводнике объектов, таблицу сценариев как, создайте в ...)
INSERT bar. [схема] .table SELECT * FROM foo. [схема] .table
Вы также можете использовать Мастер создания сценариев SQL Server чтобы помочь в создании SQL-скрипта, который может выполнять следующее:
- скопируйте схему таблицы
- любые ограничения (идентификатор, значения по умолчанию и т.д.)
- данные в таблице
- и множество других вариантов, если это необходимо
Хороший пример рабочего процесса для SQL Server 2008 с показанными снимками экрана здесь.
Вы можете пойти по этому пути: (общий пример)
insert into QualityAssuranceDB.dbo.Customers (columnA, ColumnB)
Select columnA, columnB from DeveloperDB.dbo.Customers
Также, если вам нужно сгенерировать имена столбцов, чтобы вставить предложение вставки, используйте:
select (name + ',') as TableColumns from sys.columns
where object_id = object_id('YourTableName')
Скопируйте результат и вставьте его в окно запроса, чтобы представить имена столбцов таблицы, и даже это исключит также столбец идентификаторов:
select (name + ',') as TableColumns from sys.columns
where object_id = object_id('YourTableName') and is_identity = 0
Помните, что скрипт для копирования строк будет работать, если базы данных находятся в одном месте.
<Ч>Вы можете попробовать это.
select * into <Destination_table> from <Servername>.<DatabaseName>.dbo.<sourceTable>
Имя сервера необязательно, если обе базы данных находятся на одном сервере.
Если таблица существует и мы хотим копировать только данные, мы можем попробовать этот запрос.
вставить в Destination_Existing_Tbl выберите col1, col2 FROM Source_Tbl
Копировать данные
INSERT INTO Alfestonline..url_details(url,[status],recycle)
SELECT url,status,recycle FROM AlfestonlineOld..url_details