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

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

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

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

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


person Community    schedule 12.10.2010    source источник
comment
Я нажал на него неосознанно... вот это :(   -  person Relativity    schedule 12.10.2010


Ответы (1)


Да, настройте связанный сервер на одном сервере с другим. Затем вы можете просто выполнить обычный запрос с соединением. Это будет выглядеть примерно так:

SELECT t1.Col1
    ,  t2.ColA
FROM server1Table t1
INNER JOIN SERVER2.dbname.dbo.tableName t2 ON t1.TheId = t2.TheId

это предполагает, что вы выполняете запрос на сервере Server1. Вы также можете иметь два связанных сервера и ссылаться на них с помощью [servername].[dbname].[schema].[table], а затем использовать в 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 во внутренний запрос, чтобы ограничить строки и получить только те столбцы, которые вам нужны.

person Community    schedule 12.10.2010
comment
Есть ли другой способ... я имею в виду, кроме связанного сервера. :(..Я только что подтвердил, что мы не можем использовать сервер lniked в нашей компании. - person Relativity; 12.10.2010
comment
Однако вам нужны некоторые разрешения на указанных серверах. Если у вас их нет, вы можете использовать сервер, на котором у вас есть роли разрешений sysadmin или setupadmin, и добавить оба сервера в качестве связанных серверов, а затем выполнить запрос к этим двум связанным серверам на своем собственном сервере. Однако взгляните на производительность, я могу себе представить, что она становится волосатой. - person Martijn; 12.10.2010
comment
добавлено описание OPENROWSET. - person Rory; 13.10.2010