Копировать таблицы из одной базы данных в другую в SQL Server

У меня есть база данных под названием foo и база данных под названием bar. У меня есть таблица в foo с именем tblFoobar, которую я хочу переместить (данные и все) на панель базы данных из базы данных foo. Что такое оператор SQL для этого?

10 ответов

Решение

На 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 Diff для миграции схем, но вы не ошибетесь с любым другим инструментом.

  1. Сценарий create table в студии управления запустите этот скрипт в баре, чтобы создать таблицу. (Щелкните правой кнопкой мыши таблицу в проводнике объектов, таблица сценариев как, создать в...)

  2. INSERT bar.[schema].table SELECT * FROM foo.[schema].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

Предлагаю вам три варианта:

Если это две базы данных в одном экземпляре:

      SELECT  * INTO My_New_Table FROM [HumanResources].[Department];

Если это две базы данных на разных серверах и у вас есть связанные серверы:

      SELECT  * INTO My_New_Table FROM [ServerName].[AdventureWorks2012].[HumanResources].[Department];

Если это две базы данных на разных серверах и у вас нет связанных серверов:

      SELECT * INTO My_New_Table
FROM OPENROWSET('SQLNCLI', 'Server=My_Remote_Server;Trusted_Connection=yes;',
     'SELECT * FROM AdventureWorks2012.HumanResources.Department');
Другие вопросы по тегам