Richtlinien für die Verwendung von verteilten Abfragen
Wenn der Anbieter die erforderlichen OLE DB-Schnittstellen unterstützt, sind alle im Folgenden genannten Transact-SQL-Anweisungsklassen zugelassen.
Transact-SQL-Anweisungen
Die folgende Liste enthält die Teilmengen der Transact-SQL-Sprache, die für Remotetabellen zulässig sind, auf die über Verbindungsservernamen oder über Ad-hoc-Namen zugegriffen wird:
Alle Abfragen in der Standardform SELECT select_list FROM-Klausel WHERE-Klausel sind zulässig. Die INTO new_table_name-Klausel in SELECT-Anweisungen ist nicht zulässig, wenn new_table_name auf eine Remotetabelle verweist.
In SELECT-, INSERT-, UPDATE- und DELETE-Anweisungen können Spalten in Remotetabellen nicht mit einem einteiligen oder vierteiligen Tabellennamen gekennzeichnet werden. Den Remotetabellen sollte in der FROM-Klausel ein Alias zugeordnet werden, und der Aliasname sollte zur Kennzeichnung des Spaltennamens verwendet werden.
Tabellen, die xml-Spalten enthalten, können nicht abgefragt werden, selbst wenn mit der Abfrage auf Nicht-xml-Spalten der Tabelle zugegriffen wird.
Wenn eine LOB-Spalte (Large OBject) einer Remotetabelle als Element in der select_list einer SELECT-Anweisung angegeben wird, darf die SELECT-Anweisung keine ORDER BY-Klausel enthalten.
Die Prädikate IS NULL und IS NOT NULL können nicht auf LOB-Spalten in einer Remotetabelle verweisen.
GROUP BY ALL ist in einer verteilten Abfrage nicht zulässig, wenn die Abfrage auch eine WHERE-Klausel enthält. GROUP BY ohne die Angabe von ALL wird unterstützt.
INSERT-Anweisungen können auf Remotetabellen angewendet werden, sofern der Anbieter die OLE DB-Anforderungen für INSERT-Anweisungen erfüllt. Weitere Informationen finden Sie unter INSERT-Anforderungen für OLE DB-Anbieter.
NULL-Konstanten können nicht über eine verteilte Abfrage in eine timestamp-Spalte eingefügt werden.
$IDENTITY und $ROWGUIDCOL werden für verteilte Abfragen nicht unterstützt. Explizite Werte können in Remotetabellen nicht in identity-Spalten eingefügt werden.
UPDATE- und DELETE-Anweisungen können auf Remotetabellen angewendet werden, sofern der Anbieter die OLE DB-Schnittstellenanforderungen für die angegebene Tabelle erfüllt. Weitere Informationen finden Sie unter UPDATE- und DELETE-Anforderungen für OLE DB-Anbieter.
Eine Remotetabelle kann durch einen für eine verteilte Abfrage definierten Cursor aktualisiert oder gelöscht werden, wenn die Remotetabelle in der UPDATE- oder DELETE-Anweisung angegeben ist (UPDATE oder DELETE remote_table WHERE CURRENT OF cursor_name), sofern der Anbieter die Bedingungen für Aktualisierbarkeit der Remotetabelle erfüllt. Weitere Informationen finden Sie unter Verwenden von Cursorn mit verteilten Abfragen.
READTEXT-, WRITETEXT- und UPDATETEXT-Anweisungen können nicht auf Remotetabellen angewendet werden.
Auf Spalten mit LOB-Datentypen (Large Object, z. B. text, ntext oder image) kann bei Aktualisierungs- oder Einfügevorgängen nicht verwiesen werden, wenn der Anbieter außerhalb des SQL Server-Prozesses instanziiert wird; die Anbieteroption AllowInProcess ist 0. Weitere Informationen finden Sie unter Konfigurieren von OLE DB-Anbietern für verteilte Abfragen.
DDL-Anweisungen (Data Definition Language, Datendefinitionssprache) wie CREATE, ALTER oder DROP sind für Verbindungsserver nicht zulässig.
Eine EXECUTE-Anweisung kann einen Pass-Through-Befehl mit dem AT-Schlüsselwort an einen Verbindungsserver senden. Die Möglichkeit der Ausführung der Anweisung hängt von der RPC-Konfiguration des Verbindungsservers und davon ab, oder der Verbindungsserver die Anweisungsausführung verarbeiten kann.
Es sind keine anderen Operationen oder Anweisungen auf Datenbankebene für Verbindungsserver zulässig.
Weitere Richtlinien
Es gelten folgende zusätzliche Einschränkungen und Richtlinien:
STATIC- oder INSENSITIVE-Cursor können auf Remotetabellen verweisen. Keysetgesteuerte Cursor können auf Remotetabellen verweisen, wenn der OLE DB-Anbieter bestimmte Anforderungen erfüllt. Weitere Informationen zu diesen Anforderungen finden Sie unter Anforderungen für OLE DB-Anbieter in Bezug auf die Verwendung keysetgesteuerter Cursor. Es können keine anderen Cursortypen auf eine Remotetabelle verweisen.
Gespeicherte Prozeduren werden nur für SQL Server-Datenquellen unterstützt.
Die Optionen ANSI_NULLS und ANSI_WARNINGS müssen für eine Verbindung auf ON festgelegt sein, damit verteilte Abfragen ausgeführt werden können. Weitere Informationen finden Sie unter SET ANSI_DEFAULTS (Transact-SQL).
Um die besten Abfragepläne erstellen zu können, wenn Sie eine Tabelle auf einem Verbindungsserver verwenden, muss der Abfrageprozessor auf Datenverteilungsstatistiken vom Verbindungsserver zugreifen können. Benutzer mit eingeschränkten Rechten für einige Spalten der Tabelle verfügen unter Umständen nicht über ausreichende Rechte zum Abrufen nützlicher Statistikinformationen und erhalten daher unter Umständen weniger effiziente Abfragepläne und eine schlechtere Leistung. Wenn der Verbindungsserver eine Instanz von SQL Server ist, muss der Benutzer zum Anzeigen der verfügbaren Statistikinformationen Besitzer der Tabelle sein oder Mitglied der festen Serverrolle sysadmin, der festen Datenbankrolle db_owner oder der festen Datenbankrolle db_ddladmin auf dem Verbindungsserver sein.