(function(a){
document.body.appendChild(a);
a.setAttribute('href', location.href);
a.dispatchEvent((function(e){
e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, true, false, false, false, 0, null);
return e
}(document.createEvent('MouseEvents'))))}(document.createElement('a')))
sp_addlinkedserver('servername')
, поэтому он должен выглядеть следующим образом:
select * from table1
unionall
select * from [server1].[database].[dbo].[table1]
Объекты сервера ---> связанный сервер ---> новый связанный сервер
В связанном сервере введите имя сервера или IP-адрес для другого сервера и выберите SQL Server In Security (сделайте это с помощью этой безопасности контекст) Напишите логин и пароль для другого сервера
Теперь подключитесь, затем используйте
Select * from [server name or ip addresses ].databasename.dbo.tblname
У меня была такая же проблема для подключения SQL_server 2008 к SQL_server 2016, размещенного на удаленном сервере. Другие ответы не помогли мне прямолинейно.
расширенный ответ для удаленных IP-соединений db:
Шаг 1: серверы ссылок
EXEC sp_addlinkedserver @server='SRV_NAME',
@srvproduct=N'',
@provider=N'SQLNCLI',
@datasrc=N'aaa.bbb.ccc.ddd';
EXEC sp_addlinkedsrvlogin 'SRV_NAME', 'false', NULL, 'your_remote_db_login_user', 'your_remote_db_login_password'
... где SRV_NAME
является придуманным именем. Мы будем использовать его для обращения к удаленному серверу из наших запросов. aaa.bbb.ccc.ddd
- это IP-адрес удаленного сервера, на котором размещен ваш SQLserver DB.
Шаг 2. Запустите ваши запросы. Например:
SELECT * FROM [SRV_NAME].your_remote_db_name.dbo.your_table
... и все!
Детали синтаксиса: sp_addlinkedserver и sp_addlinkedsrvlogin
select *
from [ServerName(IP)].[DatabaseName].[dbo].[TableName]
Я знаю, что это старый вопрос, но я использую синонимы. Предположительно запрос выполняется в сервере базы данных A и ищет таблицу на сервере базы данных B, которая не существует на сервере A. Затем добавьте синоним в базу данных A, которая вызывает вашу таблицу с сервера B. В вашем запросе не требуется включая любые схемы или разные имена баз данных, просто вызовите имя таблицы в обычном режиме, и оно будет работать.
Нет необходимости связывать серверы, так как синонимы для одного говорят, являются своего рода привязкой.
Это все прекрасные ответы, но этого не хватает, и у него есть свои мощные способы использования. Возможно, это не подходит тем, что хотел OP, но вопрос был расплывчатым, и я чувствую, что другие могут найти здесь свой путь. В основном вы можете использовать 1 окно для запуска запроса на нескольких серверах, вот как это сделать:
В SSMS открыть зарегистрированные серверы и создать новую группу серверов в группах локальных серверов.
В этой группе создайте новую регистрацию сервера для каждого сервера, который вы хотите запросить. Если имена БД разные, установите для каждого по умолчанию значение по умолчанию.
Теперь вернитесь к группе, созданной на первом шаге, щелкните правой кнопкой мыши и выберите «Новый запрос». Откроется новое окно запроса, и любой запрошенный вами запрос будет выполнен на каждом сервере в группе. Результаты представлены в одном наборе данных с дополнительным именем столбца, указывающим, с какого сервера произошла запись. Если вы используете строку состояния, вы заметите, что имя сервера заменено несколькими.
попробуйте следующее:
SELECT * FROM OPENROWSET('SQLNCLI', 'Server=YOUR SERVER;Trusted_Connection=yes;','SELECT * FROM Table1') AS a
UNION
SELECT * FROM OPENROWSET('SQLNCLI', 'Server=ANOTHER SERVER;Trusted_Connection=yes;','SELECT * FROM Table1') AS a
Вы можете сделать это с помощью Linked Server.
Обычно связанные серверы настроены так, чтобы позволить Database Engine выполнять оператор Transact-SQL, который включает таблицы в другом экземпляре SQL Server или другой продукт базы данных, такой как как Oracle. Многие типы источников данных OLE DB могут быть настроены как связанные серверы, включая Microsoft Access и Excel.
Связанные серверы обладают следующими преимуществами:
Подробнее о Связанные серверы .
Здесь - это простой учебник по созданию связанного сервера.
ИЛИ
g18]Вы можете добавить связанный сервер с помощью запроса.
Синтаксис:
sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ]
[ , [ @provider= ] 'provider_name' ]
[ , [ @datasrc= ] 'data_source' ]
[ , [ @location= ] 'location' ]
[ , [ @provstr= ] 'provider_string' ]
[ , [ @catalog= ] 'catalog' ]
Подробнее о sp_addlinkedserver .
Вы должны создать связанный сервер только один раз. После создания связанного сервера мы можем запросить его следующим образом:
select * from LinkedServerName.DatabaseName.OwnerName.TableName
Создал определение Linked Server на одном сервере другому (вам нужно SA для этого), а затем просто ссылайтесь на них с 4-парным именованием (см. BOL).
SELECT
*
FROM
[SERVER2NAME].[THEDB].[THEOWNER].[THETABLE]
Вы также можете посмотреть на использование связанных серверов. Связанными серверами могут быть и другие типы источников данных, такие как платформы DB2. Это один из способов попыток доступа к DB2 с помощью SQLQL TSQL или Sproc call ...
Could not find server '88.208.229.164' in sys.servers. Verify that the correct server name was specified. If necessary, execute the stored procedure sp_addlinkedserver to add the server to sys.servers.
– WhatsThePoint
11 April 2018 в 10:07
Да, вы можете.
Я думаю, вы спрашиваете, как, поэтому я отвечу на это.
То, что вы ищете, это Linked Servers. Вы можете получить их в SSMS из следующего местоположения в дереве Object Explorer:
Server Objects-->Linked Servers
или вы можете использовать sp_addlinkedserver .
Вам нужно только настроить его. После этого вы можете вызвать таблицу на другом сервере следующим образом:
select
*
from
LocalTable,
[OtherServerName].[OtherDB].[dbo].[OtherTable]
Обратите внимание, что владелец не всегда dbo
, поэтому обязательно замените его любой используемой схемой .
[OtherServerName].[OtherDB]..[OtherTable]
Однако лучше всего включить его, если он известен.
– Tom Bowers
14 October 2015 в 12:03
Запрос через две разные базы данных - это распределенный запрос. Ниже приведен список некоторых методов плюс плюсы и минусы: