Format powinien prawdopodobnie wyglądać tak:
<server>.<database>.<schema>.<table>
Na przykład:DatabaseServer1.db1.dbo.table1
Aktualizacja :Wiem, że to stare pytanie, a odpowiedź, którą mam, jest poprawna; jednak myślę, że każdy, kto natknie się na to, powinien wiedzieć kilka rzeczy.
Mianowicie, podczas wysyłania zapytań do połączonego serwera w sytuacji sprzężenia, CAŁE tabela z połączonego serwera prawdopodobnie pobrać na serwer, z którego wykonywane jest zapytanie, w celu wykonania operacji dołączenia. W przypadku OP oba table1
z DB1
i table1
z DB2
zostaną w całości przesłane na serwer wykonujący zapytanie, przypuszczalnie o nazwie DB3
.
Jeśli masz duże stoły, może w wyniku operacji, której wykonanie zajmuje dużo czasu. W końcu jest teraz ograniczony przez prędkość ruchu sieciowego, która jest o rząd wielkości mniejsza niż prędkość pamięci czy nawet transferu dysku.
Jeśli to możliwe, wykonaj pojedyncze zapytanie na serwerze zdalnym bez dołączania do tabeli lokalnej, aby pobrać potrzebne dane do tabeli tymczasowej. Następnie zapytaj o to.
Jeśli nie jest to możliwe, musisz przyjrzeć się różnym rzeczom, które powodują, że serwer SQL będzie musiał ładować lokalnie całą tabelę. Na przykład używając GETDATE()
a nawet niektórych sprzężeń. Inni zabójcy wydajności obejmują nieprzyznawanie odpowiednich praw.
Więcej informacji znajdziesz na http://thomaslarock.com/2013/05/top-3-performance-killers-for-linked-server-queries/.