SQL Server - EXEC () при выпуске DB_LINK - PullRequest
0 голосов
/ 25 июня 2019

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

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, вы получите сообщение об ошибке.

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

На самом деле, я могу выполнить эту команду 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...