Как получить данные с двух разных sql-серверов?


У меня есть встроенный запрос, в котором у меня есть одна таблица 1 в server1 и другая таблица 2 в server2. Мне нужно соединить эти две таблицы и получить данные.

Я могу сделать это, например, подключиться к одному серверу, получить данные и подключиться к следующему серверу...извлечение данных. и присоединиться к ним.

Но есть ли другой лучший способ. Я слышал о связанных серверах. Поможет ли это здесь ?

Заранее спасибо !!!

1 2

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 к внутреннему запросу, чтобы ограничить строки, и получить только те столбцы, которые вам нужны.