Следующий запрос к связанному серверу дает ожидаемые результаты:
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
.