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