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

StackOverflow https://stackoverflow.com/questions/187770

Вопрос

У меня есть база данных под названием 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
    
    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top