SQL Server - EXEC () при выпуске DB_LINK

Следующий запрос к связанному серверу дает ожидаемые результаты:

SELECT * FROM DB_LINK.[DB].[dbo].[TABLE1]

Я ожидаю, что следующее вернет тот же результат:

EXEC('SELECT * FROM [DB].[dbo].[TABLE1]') AT DB_LINK

Но вместо этого он выдаст ошибку 18482:

Could not connect to server 'B' because 'A' is not defined as a remote server.
Verify that you have specified the correct server name.

Согласно Microsoft :

Если запись с srvid = 0 не найдена в sysservers или если имя сервера с srvid = 0 принадлежит имя сервера, которое отличается от имени локального компьютера с Windows NT, вы получите сообщение об ошибке.

blockquote>

Однако ни одно из проблемных условий не существует в моей ситуации, и проблема сохраняется.

Фактически, я могу выполнить эту команду EXEC на других ссылках базы данных, при этом она работает без проблем, например, следующее прекрасно работает с другой ссылкой:

EXEC('SELECT * FROM [DB].[dbo].[TABLE1]') AT DB_LINK2

Я также прочитал эту статью , но опять-таки говорится, что эта ошибка вызвана переименованием сервера после установки SQL-сервера, но это не верно в моем случае. Следующая команда проверяет правильность имени сервера (как на локальном, так и на удаленном сервере):

select @@SERVERNAME
go

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

Кто-нибудь знает, что еще может вызвать эту проблему?

P.S. Причина, по которой команда EXEC является желательной, заключается в том, что я хочу выполнить JOIN из двух удаленных таблиц. Я обнаружил, что выполнение JOIN методом DB_LINK.[DB].[dbo].[TABLE1] медленнее, чем удаленный сервер, выполняющий JOIN через EXEC.

0
задан ImaginaryHuman072889 26 June 2019 в 10:50
поделиться