Доступ к связанному серверу со связанного сервера напрямую

У меня есть два экземпляра SQL Server:

  • SQLSERVER64
  • SQLSERVER32

В SQLSERVER32 у меня есть связанный сервер с базой данных Paradox под названием ParadoxDBLinkedServer.

Чтобы получить доступ к некоторым таблицам Paradox на сервере, я просто выполняю следующий оператор:

SELECT * 
FROM [ParadoxDBLinkedServer]...Clients

Затем мне нужно получить доступ к этим объектам из экземпляра SQLSERVER64. Для этого я создал связанный сервер с именем [.\SQLSERVER32], в данном случае указывающий на SQLSERVER32.

Сейчас я пытаюсь получить прямой доступ к объектам ParadoxDBLinkedServer из экземпляра SQLSERVER64. Я имею в виду доступ к связанному серверу с другого связанного сервера.

Запрос, который я пытаюсь выполнить, следующий:

SELECT * 
FROM [.\SQLSERVER32].[ParadoxDBLinkedServer ]...Clients

Но я получаю эту ошибку:

Числовое имя '.\SQLSERVER32.ParadoxDBLinkedServer ...Clients' содержит больше префиксов, чем максимально допустимое. Максимум 3.

Есть ли способ выполнить такой доступ? Что мне здесь не хватает?

Я пытаюсь избежать создания представления для каждой таблицы ParadoxDBLinkedServer в экземпляре SQLSERVER32, чтобы уменьшить накладные расходы.


person Andres    schedule 28.12.2016    source источник
comment
Вы получаете эту ошибку, когда у вас есть лишние объекты в вашем соглашении об именах из четырех частей: [.\SQLSERVER32].[ParadoxDBLinkedServer ].[Schema_Name].[Table_Name] попробуйте это..   -  person d_luffy_de    schedule 28.12.2016
comment
@Darshan_Viswanath_BI, схема отсутствует. На самом деле это в схеме по умолчанию. Но при попытке [.\SQLSERVER32 ].[ParadoxDBLinkedServer].[default].Clients я получаю: Поставщик OLE DB %ls для связанного сервера %ls не содержит таблицы %ls. Таблица либо не существует, либо текущий пользователь не имеет прав доступа к этой таблице.   -  person Andres    schedule 28.12.2016
comment
Можете ли вы войти на оба сервера и выполнить select * from [Database].[dbo].[Client] ? Префикс с [ParadoxDBLinkedServer] должен быть вашим решением. Если таблица не существует или у вас нет необходимых разрешений, вы об этом узнаете.   -  person d_luffy_de    schedule 28.12.2016


Ответы (2)


Это поздно, но, надеюсь, может быть полезно кому-то еще, кто придет к этому сообщению позже. Если вы можете использовать openquery, то должно работать что-то вроде этого:

SELECT * FROM OPENQUERY([.\SQLSERVER32], 'SELECT * FROM   OPENQUERY([ParadoxDBLinkedServer ],''SELECT * FROM Clients'')' )
person Weihui Guo    schedule 24.09.2020
comment
Как раз то, что мне было нужно спасибо! - person Simon; 27.03.2021

выберите * из openquery (Linkedservername, 'выберите * из имени таблицы')

person Community    schedule 28.12.2016