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

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

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

Я пытался:

On source server I have right clicked on the database, selected Tasks/Generate scripts. The problem is that under Table/View options there is no Script data option.

Then I used Script Table As/Create script to generate SQL files in order to create the tables on my destination server. But I still need all the data.

Затем я попытался с помощью:

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

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

Object contains more than the maximum number of prefixes. Maximum is 2.

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

 Naga04 авг. 2016 г., 15:33
Самый простой способ - сделать резервную копию (с данными) и затем восстановить в целевой базе данных
 jumxozizi05 февр. 2016 г., 17:31
& Quot; В & Quot; оператор (который создает таблицу и вставляет в нее) поддерживает только локальные таблицы. Сначала необходимо создать таблицу, а затем использовать & quot; вставить в [целевой сервер]. [Целевая база данных]. [Dbo]. [Конечная таблица] & quot ;.
 karthik G27 июл. 2018 г., 10:07
Я получил ошибку, как сервер не доступен / не связан. поэтому я использовал приведенные ниже команды, а затем он работал USE master; GO EXEC sp_addlinkedserver N 'имя_сервера', N 'SQL Server'; ИДТИ
 Preet Sangha13 июн. 2012 г., 08:20
Можете ли вы показать некоторые из ваших сгенерированных заявлений, пожалуйста? Вы добавили другие серверы в качестве связанных серверов?
 no913 июн. 2012 г., 08:57
не как связанные серверы. Это не имело смысла, так как оба mssql2005. Я только что создал связь. Это должен быть связанный сервер?

Ответы на вопрос(11)

c # .net. В частности, пространство имен Microsoft.SqlServer.Management.Smo.

Я использую код, подобный следующему, в компоненте сценария одного из моих пакетов служб 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 к ссылкам. Но кроме этого, это работает для меня.

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

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

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

Импорт / Экспорт данных ... & quot; в SQL Server Management Studio

 16 авг. 2018 г., 09:21
Дубликат ответа выше Damien_The_Unbeliever ...

right-click on Database -> select 'Tasks' -> select 'Generate Scripts' Select specific database objects you want to copy. Let's say one or more tables. Click Next Click Advanced and scroll down to 'Types of Data to script' and choose 'Schema and Data'. Click OK Choose where to save generated script and proceed by clicking Next
 12 сент. 2016 г., 11:15
Этот параметр недоступен в Microsoft SQL Management Studio версии 9 (сопровождающей SQL Server 2005), к которой скорее всего относится OP.
 19 мар. 2018 г., 15:06
Хорошее решение, но оно становится проблематичным с большими таблицами.

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

To export the table data into a text file on source server:

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

To import the table data from a text file on target server:

bcp <database name>.<schema name>.<table name> IN C:\FILE.TXT -c -t -T -S <server_name[ \instance_name]> -U <username> -P <Password>
 13 июн. 2012 г., 09:21
Вы не изменяете свою таблицу, поэтому она абсолютно безопасна, но не забывайте правильно использовать операторы IN или OUT. In, чтобы получить данные из текстового файла в таблицу и OUT, чтобы получить данные из таблицы в текстовый файл (или CSV-файл)
 05 февр. 2016 г., 17:06
Используйте & quot; -T & quot; для доверенного соединения или -U & lt; имя пользователя & gt; -P & lt; Пароль & gt; & quot; для входа в SQL.
 no913 июн. 2012 г., 13:42
спасибо за указание на это. +1
 no913 июн. 2012 г., 09:03
Я видел это раньше, но так как я экспортирую с рабочего сервера, я не был (все еще не уверен), если это безопасно :)

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

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

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

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

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

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

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

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

 30 нояб. 2015 г., 18:58
Ключевым моментом для меня здесь была возможность выборочного выбора данных для экспорта.
Решение Вопроса

create your table on the target server using your scripts from the Script Table As / Create Script step

on the target server, you can then issue a T-SQL statement:

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

Это должно работать просто отлично.

 13 июн. 2012 г., 09:01
@ no9: извините - конечно, чтобы это работало, вы должныadd a "linked server" between your two servers.
 no913 июн. 2012 г., 08:59
Мне нравится ваше предложение. Я попробовал это, и я получаю. Не удалось найти сервер & quot; & quot; в sys.servers. Убедитесь, что указано правильное имя сервера ... Возможно, это проблема, поскольку имя исходного сервера находится в & quot; NAME \ NAME2 & quot; формат? Но я думаю, что [] должно это исправить .... идея?
 no913 июн. 2012 г., 13:34
да уж. Но представьте, у меня проблема с созданием связанного сервера. Производственный сервер настроен на разрешение удаленных подключений, но я все еще получаю тайм-аут, даже если использую олицетворение или напрямую usr / pwd. Так как управление сервером не находится в моем домене, я мало что могу сделать. Но мне удалось решить мою проблему по-другому. Опубликует ответ только для удовольствия и приму ваше, так как мне нравится решение.

use <DestinationDatabase>
select * into <DestinationTable> from <SourceDataBase>.dbo.<SourceTable>
 13 июн. 2012 г., 09:09
Вы создали связанный сервер? Непонятно из твоего вопроса. Затем добавьте имя & lt; SourceServer & gt; перед & lt; SourceDatabase & gt; в запросе выше (выполняется на & lt; DestinationServer & gt;).
 no913 июн. 2012 г., 13:36
не могу создать связанный сервер. Смотрите мой ответ на marc_s anwser
 no913 июн. 2012 г., 09:05
У меня есть два разных сервера. Если бы у меня был только один, это бы сработало.

Мастер импорта и экспорта (в разделе «Задачи» -> Экспорт данных).

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

 16 авг. 2018 г., 09:17
Лучшее решение для меня до сих пор!
 26 янв. 2017 г., 15:49
@ user763539 - правда? В прошлый раз, когда я проверял, не было возможности создать сценарий, который включает, например,INSERT заявления; конечно, похоже на правдуsql-server-2005, У вас есть ссылка или ссылка?
 16 авг. 2018 г., 09:20
@Damien_The_Unbeliever, почему вы настаиваете на создании сценариев? Это был не вопрос ...
 26 янв. 2017 г., 15:44
скрипт wizzard может экспортировать данные тоже
 no913 июн. 2012 г., 09:02
Там нет опции экспорта данных в базе данных, из которой я хочу экспортировать таблицы. Его просто: отсоединить, сжать, резервное копирование, восстановление, генерация сценариев ...

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

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

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

 13 июн. 2012 г., 08:45
Да ладно, сам этого не знал. Спасибо за то, что просветил меня. В случае выше я все еще рекомендую проект SSIS для этих задач.
 13 июн. 2012 г., 08:59
Служба SSIS представляет собой небольшую перегрузку для одноразовой копии, но для регулярных и инкрементальных нагрузок я также рекомендую это сделать!
 no913 июн. 2012 г., 09:04
поскольку его экспресс-служба SSIS SQL2005 не поддерживается.
 13 июн. 2012 г., 08:24
Да, если вы добавили их как связанные серверыmsdn.microsoft.com/en-us/library/ms188279.aspx
 13 июн. 2012 г., 09:19
SQL 2005 Express? Стандарт и выше имеет SSIS.

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

created a backup of production server database restored the database on my test server executed the insert into statements

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

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

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

тил это в начале! Но вы можете создавать сценарии вставки там (очень хорошая функция, но в очень не интуитивном месте).

Когда вы перейдете к шагу & quot; Установить параметры сценариев & quot; перейти к & quot; Дополнительно & quot; Вкладка.

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

 13 июн. 2012 г., 13:37
пожалуйста! :)

Ваш ответ на вопрос