Формат, вероятно, должен быть:
<server>.<database>.<schema>.<table>
Например: DatabaseServer1.db1.dbo.table1
Обновление : я знаю, что это старый вопрос, и у меня есть правильный ответ; однако я думаю, что любой, кто наткнется на это, должен знать несколько вещей.
А именно, при запросе к связанному серверу в ситуации соединения ВСЯ таблица со связанного сервера, вероятно, будет загружена на сервер, с которого выполняется запрос, для выполнения операции соединения. В случае OP и table1
from, DB1
и table1
from DB2
будут полностью переданы на сервер, выполняющий запрос, предположительно названный DB3
.
Если у вас большие столы, это может привести к операции, выполнение которой займет много времени. В конце концов, теперь он ограничен скоростью сетевого трафика, которая на несколько порядков ниже скорости передачи памяти или даже диска.
Если возможно, выполните один запрос к удаленному серверу без присоединения к локальной таблице, чтобы вытащить нужные данные во временную таблицу. Затем спросите об этом.
Если это невозможно, вам нужно посмотреть на различные вещи, из-за которых SQL-сервер должен загружать всю таблицу локально. Например, использование GETDATE()
или даже определенные объединения. Другие убийцы производительности включают отсутствие соответствующих прав.
См. Http://thomaslarock.com/2013/05/top-3-performance-killers-for-linked-server-queries/ для получения дополнительной информации.