Share via


Anforderungen für OLE DB-Anbieter in Bezug auf die Verwendung keysetgesteuerter Cursor

Keysetgesteuerte Transact-SQL-Cursor können nur auf Remotetabellen verweisen, wenn folgende Bedingungen erfüllt sind:

  • Die verteilte Abfrage muss die Anforderungen für SELECT-Anweisungen erfüllen, die in einer DECLARE CURSOR-Anweisung verwendet werden, die den keysetgesteuerten Cursor deklariert. Weitere Informationen zu den Transact-SQL-Bedingungen für die Unterstützung keysetgesteuerter Cursor finden Sie unter DECLARE CURSOR (Transact-SQL).

  • Alle lokalen Tabellen in der Abfrage müssen einen eindeutigen Index haben. Der Index der Remotetabelle sollte über das INDEXES-Rowset der IDBSchemaRowset-Schnittstelle verfügbar gemacht werden.

Indexanforderungen für OLE DB-Anbieter

SQL Server kann Indizes für Tabellen von einem OLE DB-Anbieter zur Auswertung bestimmter Abfragen verwenden. Damit SQL Server einen Index verwenden kann, sollte der Anbieter OLE DB-Schnittstellen verfügbar machen, die das Scannen eines Indexrowsets, das Durchsuchen des Indexrowsets mithilfe von Indexspaltenwerten und das Festlegen der Zeilenposition im Basistabellen-Rowset mithilfe von Lesezeichen ermöglichen, die aus dem Indexrowset abgerufen werden.

Die Verwendung der Indizes des OLE DB-Anbieters erzielt nur dann Leistungsvorteile, wenn sich die Index- und Tabellenrowsets auf demselben Computer wie die Instanz von SQL Server befinden. Deshalb sollte die Option Index als Zugriffsmethode nur festgelegt werden, wenn sich die Datenquelle auf demselben Computer wie SQL Server befindet.

SQL Server kann die Indizes eines OLE DB-Anbieters nur verwenden, wenn die folgenden Bedingungen erfüllt werden:

  • Der Anbieter muss die IDBSchemaRowset-Schnittstelle mit den TABLES-, COLUMNS- und INDEXES-Schemarowsets unterstützen.

  • Der Anbieter muss das Öffnen eines Rowsets in einem Index mithilfe von IOpenRowset durch Angabe des Indexnamens und des zugehörigen Basistabellennamens unterstützen.

  • Das Indexobjekt sollte die obligatorischen Schnittstellen unterstützen: IRowset, IRowsetIndex, IAccessor, IColumnsInfo, IRowsetInfo und IConvertTypes.

  • Rowsets, die für die indizierte Basistabelle geöffnet werden (mithilfe von IOpenRowset), müssen die IRowsetLocate-Schnittstelle unterstützen, um auf eine Zeile, basierend auf einem vom Index abgerufenen Lesezeichen, positionieren zu können.

Wenn der OLE DB-Anbieter diese Anforderungen erfüllt, kann der SQL Server-Administrator die Anbieteroption Index als Zugriffsmethode festlegen, um SQL Server die Verwendung der Indizes des Anbieters zur Auswertung der Abfragen zu ermöglichen. Standardmäßig versucht SQL Server nicht, die Indizes des Anbieters zu verwenden, es sei denn, diese Option ist festgelegt.

Anforderungen für aktualisierbare Keysetcursor

Eine Remotetabelle kann über einen Keysetcursor aktualisiert oder gelöscht werden, der für eine verteilte Abfrage definiert ist. Beispiel: UPDATE | DELETE remote_table WHERE CURRENT OF cursor_name.

Es folgen die Bedingungen, unter denen aktualisierbare Cursor für verteilte Abfragen zulässig sind:

  • Der Anbieter sollte die Anforderungen für Aktualisierungen und Löschungen in der Remotetabelle erfüllen. Weitere Informationen finden Sie unter UPDATE- und DELETE-Anforderungen für OLE DB-Anbieter.

  • Alle Cursorvorgänge müssen Teil einer expliziten Benutzertransaktion (oder Transaktion mit mehreren Anweisungen) sein mit einer Isolationsstufe, die der Stufe Repeatable Read oder der serialisierbaren Isolationsstufe (Serializable) entspricht.

Der Anbieter muss verteilte Transaktionen mit der ITransactionJoin-Schnittstelle unterstützen.