Копировать таблицы из одной базы данных в другую в SQL Server - PullRequest
313 голосов
/ 09 октября 2008

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

Ответы [ 9 ]

529 голосов
/ 09 октября 2008

Задача «Импорт данных» в SQL Server Management Studio (щелчок правой кнопкой мыши по имени БД, затем задачи) сделает большую часть этого за вас. Запустите его из базы данных, в которую вы хотите скопировать данные.

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

Я использую это все время, и оно работает довольно хорошо.

200 голосов
/ 09 октября 2008

На SQL Server? а на одном сервере базы данных? Используйте именование из трех частей.

INSERT INTO bar..tblFoobar( *fieldlist* )
SELECT *fieldlist* FROM foo..tblFoobar

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

102 голосов
/ 09 октября 2008

Это должно работать:

SELECT * 
INTO DestinationDB..MyDestinationTable 
FROM SourceDB..MySourceTable 

Будет не копировать содержимое, значения по умолчанию или индексы. Созданная таблица будет не иметь кластеризованный индекс.

В качестве альтернативы вы можете:

INSERT INTO DestinationDB..MyDestinationTable 
SELECT * FROM SourceDB..MySourceTable

Если ваша таблица назначения существует и пуста.

46 голосов
/ 20 марта 2013

Если это только один стол, то все, что вам нужно сделать, это

  • Определение таблицы скриптов
  • Создать новую таблицу в другой базе данных
  • Обновление правил, индексов, разрешений и т. П.
  • Импорт данных (несколько вставок в примеры уже показаны выше)

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

С одним или несколькими объектами вы можете обращаться вручную без каких-либо проблем. Однако, когда есть больше, чем просто несколько обновлений, очень полезны сторонние инструменты сравнения. Прямо сейчас я использую ApexSQL Diff для миграции схем, но вы не ошибетесь с любым другим инструментом.

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

  2. INSERT bar.[schema].table SELECT * FROM foo.[schema].table

16 голосов
/ 12 октября 2011

Вы также можете использовать Мастер создания сценариев SQL Server , чтобы помочь при создании сценариев SQL, которые могут выполнять следующие действия:

  • скопировать схему таблицы
  • любые ограничения (идентичность, значения по умолчанию и т. Д.)
  • данные в таблице
  • и многие другие опции при необходимости

Хороший пример рабочего процесса для SQL Server 2008 со снимками экрана, показанными здесь .

9 голосов
/ 06 мая 2012

Вы можете пойти по этому пути: (общий пример)

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>

Имя сервера необязательно, если обе базы данных находятся на одном сервере.

1 голос
/ 24 мая 2016

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

вставить в Destination_Existing_Tbl выберите col1, col2 FROM Source_Tbl

0 голосов
/ 18 января 2016

Копировать данные

INSERT INTO Alfestonline..url_details(url,[status],recycle) 
SELECT url,status,recycle FROM AlfestonlineOld..url_details
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...