OPENQUERY (Transact-SQL)

Aktualisiert: 17. Juli 2006

Führt die angegebene Pass-Through-Abfrage auf dem angegebenen Verbindungsserver aus. Bei diesem Server handelt es sich um eine OLE DB-Datenquelle. Auf OPENQUERY kann in der FROM-Klausel einer Abfrage so verwiesen werden, als ob es ein Tabellenname wäre. Auf OPENQUERY kann auch als Zieltabelle einer INSERT-, UPDATE- oder DELETE-Anweisung verwiesen werden. Dies hängt von den Funktionen des OLE DB-Anbieters ab. Obwohl die Abfrage möglicherweise mehrere Resultsets zurückgibt, gibt OPENQUERY nur das erste zurück.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

OPENQUERY ( linked_server ,'query' )

Argumente

  • linked_server
    Ein Bezeichner, der den Namen des Verbindungsservers darstellt.
  • 'query'
    Ist die Zeichenfolge der Abfrage, die auf dem Verbindungsserver ausgeführt wird. Die maximale Länge der Zeichenfolge beträgt 8 KB.

Hinweise

Für die Argumente von OPENQUERY können keine Variablen verwendet werden.

In SQL Server 2000 und höheren Versionen können mit OPENQUERY keine erweiterten gespeicherten Prozeduren auf einem Verbindungsserver ausgeführt werden. Eine erweiterte gespeicherte Prozedur kann jedoch auf einem Verbindungsserver ausgeführt werden, wenn der vierteilige Name verwendet wird. Beispiel:

EXEC SeattleSales.master.dbo.xp_msver

Berechtigungen

Jeder beliebige Benutzer kann OPENQUERY ausführen. Die Berechtigungen, die für die Verbindung mit dem Remoteserver verwendet werden, werden aus den Einstellungen für den Verbindungsserver abgerufen.

Beispiele

A. Ausführen einer SELECT-Pass-Through-Abfrage

Im folgenden Beispiel wird ein Verbindungsserver namens OracleSvr für eine Oracle-Datenbank erstellt. Dies geschieht mithilfe von Microsoft OLE DB-Anbieter für Oracle. Anschließend wird in diesem Beispiel eine SELECT-Pass-Through-Abfrage für diesen Verbindungsserver verwendet.

ms188427.note(de-de,SQL.90).gifHinweis:
Im folgenden Beispiel wird davon ausgegangen, dass ein Oracle-Datenbankalias namens ORCLDB erstellt wurde.
EXEC sp_addlinkedserver 'OracleSvr', 
   'Oracle 7.3', 
   'MSDAORA', 
   'ORCLDB'
GO
SELECT *
FROM OPENQUERY(OracleSvr, 'SELECT name, id FROM joe.titles') 
GO

B. Ausführen einer UPDATE-Pass-Through-Abfrage

Im folgenden Beispiel wird eine UPDATE-Pass-Through-Abfrage für den in Beispiel A erstellten Verbindungsserver verwendet.

UPDATE OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles WHERE id = 101') 
SET name = 'ADifferentName';

C. Ausführen einer INSERT-Pass-Through-Abfrage

Im folgenden Beispiel wird eine INSERT-Pass-Through-Abfrage für den in Beispiel A erstellten Verbindungsserver verwendet.

INSERT OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles')
VALUES ('NewTitle');

D. Ausführen einer DELETE-Pass-Through-Abfrage

Im folgenden Beispiel wird eine DELETE-Pass-Through-Abfrage verwendet, um die in Beispiel C eingefügte Zeile zu löschen.

DELETE OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles WHERE name = ''NewTitle''');

Siehe auch

Verweis

DELETE (Transact-SQL)
FROM (Transact-SQL)
INSERT (Transact-SQL)
OPENDATASOURCE (Transact-SQL)
OPENROWSET (Transact-SQL)
Rowsetfunktionen (Transact-SQL)
SELECT (Transact-SQL)
sp_addlinkedserver (Transact-SQL)
sp_serveroption (Transact-SQL)
UPDATE (Transact-SQL)
WHERE (Transact-SQL)

Andere Ressourcen

Verteilte Abfragen

Hilfe und Informationen

Informationsquellen für SQL Server 2005

Änderungsverlauf

Version Verlauf

17. Juli 2006

Neuer Inhalt:
  • Die Beispiele für INSERT, UPDATE und DELETE wurden hinzugefügt.

14. April 2006

Neuer Inhalt:
  • Die Problemumgehung für die Einschränkung bezüglich erweiterter gespeicherter Prozeduren wurde hinzugefügt.