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