Как получить данные с двух разных sql-серверов?
У меня есть встроенный запрос, в котором у меня есть одна таблица 1 в server1 и другая таблица 2 в server2. Мне нужно соединить эти две таблицы и получить данные.
Я могу сделать это, например, подключиться к одному серверу, получить данные и подключиться к следующему серверу...извлечение данных. и присоединиться к ним.
Но есть ли другой лучший способ. Я слышал о связанных серверах. Поможет ли это здесь ?
Заранее спасибо !!!
1 ответ:
Да, установите связанный сервер на одном сервере с другим. Тогда вы можете просто сделать обычный запрос с соединением. Это выглядело бы примерно так:
SELECT t1.Col1 , t2.ColA FROM server1Table t1 INNER JOIN SERVER2.dbname.dbo.tableName t2 ON t1.TheId = t2.TheId
Предполагается, что вы выполняете запрос на сервере Server1. Вы также можете иметь два связанных сервера и ссылаться на них с помощью [servername].[dbname].[схема].[таблица], а затем использовать в SQL как обычно.
Альтернативно, вы можете использовать OPENROWSET (но связанный сервер проще всего, если вы можете настроить его). OpenRowSets выглядят так это:
SELECT t1.Col1 , t2.ColA FROM server1Table t1 INNER JOIN OPENROWSET('SQLNCLI', 'Server=Server2;Trusted_Connection=yes;', 'SELECT t2.ColA, t2.TheId FROM dbname.dbo.tableName') AS t2 ON t1.TheId = t2.TheId
А затем вы можете просто присоединиться к "А", как если бы это была локальная таблица. Под капотом это, вероятно, тянет все данные вниз к вашей локальной базе данных, поэтому вы должны рассмотреть возможность добавления WHERE к внутреннему запросу, чтобы ограничить строки, и получить только те столбцы, которые вам нужны.