Перенос данных из одной базы данных в другую

У меня есть две базы данных, скажем, базы данных A и B с разными структурами данных. В базе данных А есть таблица контактов. В базе данных B есть таблица Accounts.

Я хочу перенести данные из таблицы контактов базы данных A в учетные записи таблицы базы данных B. Я использую SQL Server 2005 и хочу написать sql-скрипты для этого.

Может ли кто-нибудь сказать мне, какой самый простой и эффективный способ добиться этого:
а) Если они находятся на одном сервере SQL
б) Если они находятся на разных серверах SQL.


person Community    schedule 10.06.2009    source источник


Ответы (3)


Самый простой метод не обязательно самый эффективный. SSIS, вероятно, является наиболее эффективным, как уже указал Митч.

Самый простой (если вы еще не знаете SSIS) — просто настроить связанный сервер с удаленной БД и ВЫБРАТЬ данные, используя четырехкомпонентное имя. Вы настраиваете связанный сервер, используя sp_addlinkedserver и sp_addlinkedsrvlogin (проверьте синтаксис BOL) и запрашиваете следующее:

INSERT INTO MyLocalTable (ColumnList)
SELECT <Columns> FROM RemoteServer.RemoteDB.RemoteSchema.RemoteTable
person Aaron Alton    schedule 10.06.2009
comment
Спасибо, Аарон, я кое-что прочитал о SSIS. Амм, правда ли, что SSIS имеет только графический пользовательский интерфейс для сопоставления, или можно ли генерировать сценарии после завершения сопоставления, чтобы его можно было использовать несколько раз. Система, над которой я работаю, будет запускать хранимую процедуру, которая считывает данные из базы данных A в базу данных B. - person ; 10.06.2009

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

person Mitch Wheat    schedule 10.06.2009
comment
Спасибо, Митч, я немного почитал про SSIS. Амм, правда ли, что SSIS имеет только графический пользовательский интерфейс для сопоставления, или можно ли генерировать сценарии после завершения сопоставления, чтобы его можно было использовать несколько раз. Система, над которой я работаю, будет запускать хранимую процедуру, которая считывает данные из базы данных A в базу данных B. - person ; 10.06.2009

Это разовый перевод? Если это простая передача, я пишу оператор SELECT для создания операторов INSERT, т.е.

SELECT 'INSERT INTO Accounts (ID, Name) VALUES (' + CAST(ID as VARCHAR) + ', ''' + Name  + ''')'
FROM Contacts

Запустите это в базе данных A - и он выдаст все операторы INSERT, которые вы скопируете и вставите, чтобы вы могли запускать их в базе данных B.

Или в той же базе:

INSERT INTO DatabaseA.dbo.Accounts (ID, Name) 
SELECT Id, Name
FROM DatabaseB.dbo.Contacts

Все еще недовольны — попробуйте настроить связанные серверы: http://msdn.microsoft.com/en-us/library/aa213778(SQL.80).aspx

person russau    schedule 10.06.2009
comment
Спасибо russau. Я. мне нужна операция несколько раз. - person ; 10.06.2009