Подтвердить что ты не робот

Экспортировать данные таблицы с одного SQL Server на другой

У меня есть два SQL-сервера (версия 2005 года).

Я хочу перенести несколько таблиц из одного в другое.

Я пробовал:

  • На исходном сервере я щелкнул правой кнопкой мыши по базе данных, выбрав Tasks/Generate scripts. Проблема в том, что в Table/View options нет опции Script data.

  • Затем я использовал Script Table As/Create script для генерации SQL файлов для создания таблиц на моем конечном сервере. Но мне все еще нужны все данные.

Затем я попытался использовать:

SELECT * 
INTO [destination server].[destination database].[dbo].[destination table] 
FROM [source server].[source database].[dbo].[source table]

Но я получаю ошибку:

Объект содержит больше, чем максимальное количество префиксов. Максимум 2.

Может ли кто-нибудь указать мне правильное решение моей проблемы?

4b9b3361

Ответ 1

Попробуйте следующее:

  • создайте свою таблицу на целевом сервере, используя ваши сценарии с шага Script Table As / Create Script

  • на целевом сервере, вы можете затем выпустить инструкцию T-SQL:

    INSERT INTO dbo.YourTableNameHere
       SELECT *
       FROM [SourceServer].[SourceDatabase].dbo.YourTableNameHere
    

Это должно работать нормально.

Ответ 2

Просто, чтобы показать еще один вариант (для SQL Server 2008 и выше):

  • щелкните правой кнопкой мыши по базе данных → выберите "Задачи" → выберите "Сгенерировать скрипты"
  • Выберите конкретные объекты базы данных, которые вы хотите скопировать. Скажем, одну или несколько таблиц. Нажмите "Далее"
  • Нажмите "Дополнительно" и прокрутите вниз до "Типы данных до script" и выберите "Схема и данные". Нажмите OK
  • Выберите, где сохранить сгенерированный script, и нажмите "Далее"

Ответ 3

В таблице "Задачи/Генерация скриптов" есть таблица script. Я тоже пропустил это в начале! Но вы можете создавать там скрипты вставки (очень приятная функция, но в очень неинтуитивном месте).

Когда вы переходите к пункту "Задать параметры сценариев", перейдите на вкладку "Дополнительно".

Шаги, описанные здесь (фотографии могут понять, но я пишу там на латышском языке).

Ответ 4

Попробуйте использовать Мастер импорта и экспорта (в разделе Задачи → Экспорт данных).

Он предлагает создать таблицы в базе данных назначения. Принимая во внимание, что, как вы видели, мастер сценариев может создавать структуру таблицы.

Ответ 5

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

Чтобы экспортировать данные таблицы в текстовый файл на исходном сервере:

bcp <database name>.<schema name>.<table name> OUT C:\FILE.TXT -c -t -T -S <server_name[ \instance_name]> -U <username> -P <Password> 

Чтобы импортировать данные таблицы из текстового файла на целевом сервере:

bcp <database name>.<schema name>.<table name> IN C:\FILE.TXT -c -t -T -S <server_name[ \instance_name]> -U <username> -P <Password>

Ответ 6

Это можно сделать с помощью "Импорт/экспорт данных..." в SQL Server Management Studio

Ответ 7

Вы не можете выбрать сервер источника/назначения.

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

Если столбцы таблицы равны (включая порядок!), вы можете сделать это:

INSERT INTO [destination database].[dbo].[destination table]
SELECT *
FROM [source database].[dbo].[source table]

Если вы хотите сделать это, как только сможете создать резервную копию/восстановить исходную базу данных. Если вам нужно делать это чаще, я рекомендую вам запустить проект SSIS, где вы определяете исходную базу данных (там вы можете выбрать любое соединение на любом сервере) и создать проект, в котором вы перемещаете свои данные. См. Дополнительную информацию здесь: http://msdn.microsoft.com/en-us/library/ms169917%28v=sql.105%29.aspx

Ответ 8

Просто для ударов.

Так как я не смог создать связанный сервер, и поскольку простое подключение к производственному серверу было недостаточно для использования INSERT INTO, я сделал следующее:

  • создана резервная копия базы данных производственного сервера
  • восстановил базу данных на моем тестовом сервере
  • выполнил вставку в операторы

Это бэкдор-решение, но поскольку у меня были проблемы, это сработало для меня.

Так как я создал пустые таблицы с помощью SCRIPT TABLE AS / CREATE, чтобы перенести все ключи и индексы, я не мог использовать SELECT INTO. SELECT INTO работает только в том случае, если таблицы не существуют в месте назначения, но не копируют ключи и индексы, поэтому вам нужно сделать это вручную. Недостатком использования инструкции INSERT INTO является то, что вы должны вручную указать все имена столбцов, а также могут возникнуть некоторые проблемы, если сбой некоторых внешних ключей.

Спасибо всем, есть несколько отличных решений, но я решил принять marc_s anwser.

Ответ 9

Для копирования данных из источника в пункт назначения:

use <DestinationDatabase>
select * into <DestinationTable> from <SourceDataBase>.dbo.<SourceTable>

Ответ 10

Это несколько решение, но это сработало для меня. Я надеюсь, что он работает и для этой проблемы для других:

Вы можете запустить SQL-запрос select в таблице, которую вы хотите экспортировать, и сохранить результат как .xls в вашем диске.

Теперь создайте таблицу, которую вы хотите добавить, со всеми столбцами и индексами. Это можно легко сделать, щелкнув правой кнопкой мыши по фактической таблице и выбрав "Создать для

Теперь вы можете щелкнуть правой кнопкой мыши по БД, где вы хотите добавить свою таблицу, и выбрать "Задачи" > "Импорт".

Откроется мастер импорта экспорта и выберите следующий. Выберите Microsoft Excel в качестве источника данных ввода, а затем просмотрите и выберите файл .xls, который вы сохранили ранее.

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

Примечание. Если есть какое-либо поле для идентификации, в таблице назначения вы можете удалить свойство идентификации, так как эти данные также будут вставлены. Поэтому, если у вас есть это свойство Identity только тогда, это приведет к ошибке процесса импорта.

Теперь нажмите "Далее" и нажмите "Готово", и он покажет вам, сколько записей импортируется и возвращает успех, если ошибок не возникает.

Ответ 11

Еще один вариант, если у вас есть это: С#.net. В частности, пространство имен Microsoft.SqlServer.Management.Smo.

Я использую код, похожий на следующий в компоненте Script одного из моих пакетов SSIS.

var tableToTransfer = "someTable";
var transferringTableSchema = "dbo";

var srvSource = new Server("sourceServer");
var dbSource = srvSource.Databases["sourceDB"];

var srvDestination = new Server("destinationServer"); 
var dbDestination = srvDestination.Databases["destinationDB"];

var xfr = 
    new Transfer(dbSource) {
        DestinationServer = srvDestination.Name,
        DestinationDatabase = dbDestination.Name,
        CopyAllObjects = false,
        DestinationLoginSecure = true,
        DropDestinationObjectsFirst = true,
        CopyData = true
    };

xfr.Options.ContinueScriptingOnError = false; 
xfr.Options.WithDependencies = false; 

xfr.ObjectList.Add(dbSource.Tables[tableToTransfer,transferringTableSchema]);
xfr.TransferData();

Я думаю, что мне пришлось явно искать и добавлять библиотеку Microsoft.SqlServer.Smo к ссылкам. Но вне этого, это было для меня.

Обновление: пространство имен и библиотеки были более сложными, чем я помнил.

Для библиотек добавьте ссылки на:

  • Microsoft.SqlServer.Smo.dll
  • Microsoft.SqlServer.SmoExtended.dll
  • Microsoft.SqlServer.ConnectionInfo.dll
  • Microsoft.SqlServer.Management.Sdk.Sfc.dll

Для пространств имен добавьте:

  • Microsoft.SqlServer.Management.Common
  • Microsoft.SqlServer.Management.Smo