Кросс-серверный SQL
Я хочу перенести данные из базы данных одного сервера в базу данных другого сервера. Обе базы данных находятся на разных серверах mssql 2005. Репликация, вероятно, не вариант, так как база данных назначения создается с нуля на основе [временного интервала].
Предпочтительно я бы сделал что-то вроде
insert *
from db1/table1
into db2/table2
where rule1 = true
Очевидно, что учетные данные для подключения будут включены в этот сценарий.
8 ответов
Я думаю, что вы хотите сделать, это создать связанный сервер в соответствии с этой статьей MSDN. Затем вы должны выбрать имя объекта из 4 частей, например:
Select * From ServerName.DbName.SchemaName.TableName
Вы можете использовать Open Data Source следующим образом:
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO
SELECT *
FROM OPENDATASOURCE('SQLOLEDB',
'Data Source=<Ip Of Your Server>;
User ID=<SQL User Name>;Password=<SQL password>').<DataBase name>.<SchemaName>.<Table Or View Name>
Go
Ну, я не согласен с вашим комментарием по репликации. Вы можете запустить репликацию, создав базу данных с нуля, и вы можете контролировать, будут ли обновления выполняться путем обновления доступной клиентской базы данных или просто воссоздания базы данных.
Автоматическая репликация облегчит вашу работу благодаря автоматическому управлению ключами и связями.
Я думаю, что проще всего запустить репликацию моментальных снимков через MSSQL Server Studio, получить соответствующие сценарии T-SQL (т.е. соответствующие инструкции T-SQL для публикации и подписок) и записать эти сценарии как часть задания в список заданий агента SQL или задание репликации в папке репликаций.
Вы бы перенесли весь контент базы данных с одного сервера на другой или просто некоторые данные из пары таблиц?
Для обоих вариантов SSIS выполнит эту работу, особенно если вы планируете перевод на регулярной основе.
Если вы просто хотите скопировать некоторые данные из 1 или 2 таблиц и предпочитаете делать это с помощью TSQL в SQL Management Studio, тогда вы можете использовать связанный сервер, как предложено pelser
- Настройте исходный сервер базы данных как связанный сервер
- Используйте следующий синтаксис для доступа к данным
select columnName1, columnName2, etc from serverName.databaseName.schemaName.tableName
Являются ли службы интеграции SQL Server (SSIS) дополнительным вариантом? Если так, я бы использовал это.
Вы можете пойти по маршруту связанного сервера.
вы просто не можете использовать select * в, вы должны сделать вставку в select.
Я бы избегал репликации, если у вас нет опыта работы с ней, так как это может быть трудно исправить, если она сломается и может быть склонна к другим проблемам, если не будет должным образом управляться.
Сохраняйте это простым, особенно если базы данных маленькие.
Можете ли вы использовать службы преобразования данных для выполнения этой работы? Это предоставляет всевозможные инструменты для выполнения подобных задач.
Вы можете скачать пакет возможностей SQL Server 2005 с веб-сайта Microsoft здесь
CREATE VIEW newR1
AS
SELECT * from OPENQUERY ([INSTANCE_NAME], 'select * from DbName.SchemaName.TableName')