2009-01-30 8 views
20

Ich habe einen Verbindungsserver hinzugefügt, der in der Liste der verknüpften Server angezeigt wird, aber wenn ich ihn abfrage, wird ein Fehler mit dem Namen des Datenbankservers ausgelöst.Abfragen eines verknüpften SQL-Servers

EXEC sp_helpserver 
EXEC sp_addlinkedserver 'aa-db-dev01' 
Select * from openquery('aa-db-dev01','Select * from TestDB.dbo.users') 

Msg 102, Ebene 15, Status 1, Zeile 1
falsche Syntax nahe 'aa-db-BM01'.

Antwort

30
SELECT * FROM [server].[database].[schema].[table] 

Dies funktioniert für mich. SSMS intellisense kann dies immer noch als Syntaxfehler unterstreichen, aber es sollte funktionieren, wenn Ihr Verbindungsserver konfiguriert ist und Ihre Abfrage ansonsten korrekt ist.

+0

Von der Prüfung ich getan habe, während 4part Namens funktioniert, es endet als langsamer als Openquery verwenden. –

+0

Auch dieser Ansatz funktioniert nicht, wenn Ihre Tabellendefinition 'xml' Spaltentypen enthält. – Lankymart

+0

@ Hack-R ist der Server als ein verknüpft registriert? –

22

Sie müssen die Anführungszeichen um den Namen des Verbindungsservers entfernen. Es sollte so aussehen:

Select * from Openquery (aa-db-BM01, 'Select * from TestDB.dbo.users')

+0

Sie verlieren Intellisense auf diese Weise gehen Sie den anderen Weg, wenn Sie aus einer Entwicklungsstandpunkt können, aber Sie müssen auf diese Weise verwenden, wenn der Anbieter den Katalog nicht verfügbar macht oder Schema. –

+0

Mit dieser Option gibt es eine 8000 Zeichen Grenze für die Abfrage. Ich versuche immer noch, einen Workaround dafür zu finden. 'exec (@Query) bei LinkedServerName' scheint wie eine Arbeit dafür zu sein, aber ich kann das Ergebnis nicht mit anderen Tabellen verbinden. Ich habe versucht, temporäre Tabellen ohne Glück zu verwenden. –

5

Sie verwenden können:

SELECT * FROM [aa-db-dev01].[TestDB].[dbo].[users]; 
+0

Dies funktioniert NICHT mit einigen -SQL-Server-Verbindungsservern, was zu einem ungültigen Schema oder Katalog für den Anbieter "MSDASQL" für den Verbindungsserver "MyLinkedServer" führte. – brewmanz

1

try Select * from openquery("aa-db-dev01",'Select * from users') sollte die Datenbankverbindung definiert werden, in er-Server verknüpft Konfiguration

1

ich benutze offene Abfrage diese Aufgabe auszuführen, wie so:

select top 1 * 
INTO [DATABASE_TO_INSERT_INTO].[dbo].[TABLE_TO_SELECT_INTO] 
from openquery(
    [LINKED_SERVER_NAME], 
    'select * from [DATABASE_ON_LINKED_SERVER].[dbo].[TABLE_TO_SELECT_FROM]' 
) 

Das obige Beispiel verwendet eine offene Abfrage, um Daten aus einer Datenbank auf einem Verbindungsserver in eine Datenbank Ihrer Wahl auszuwählen.

Hinweis: Für Vollständigkeit der Referenz können Sie eine einfache Auswahl ausführen wie folgt:

select top 1 * from openquery(
    [LINKED_SERVER_NAME], 
    'select * from [DATABASE_ON_LINKED_SERVER].[dbo].[TABLE_TO_SELECT_FROM]' 
)