Verwenden impliziter Cursorkonvertierungen
Anwendungen können einen Cursortyp anfordern und anschließend eine Transact-SQL-Anweisung ausführen, die nicht von Servercursorn des angeforderten Typs unterstützt wird. MicrosoftSQL Server gibt einen Fehler zurück, der angibt, dass sich der Cursortyp geändert hat. Diese Konvertierung wird als implizite Cursorkonvertierung bezeichnet oder auch als Cursordegradierung.
Es folgen die Faktoren, durch die SQL Server implizit einen Cursor aus einem Typ in einen anderen konvertiert.
Schritt |
Konvertierung ausgelöst durch |
Vorwärtscursor |
Keysetgesteuerter Cursor |
Dynamischer Cursor |
Wechseln zu Schritt |
---|---|---|---|---|---|
1 |
Die FROM-Klausel der Abfrage verweist auf keine Tabellen. |
Wird statisch. |
Wird statisch. |
Wird statisch. |
Fertig |
2 |
Abfrage enthält: Auswahllistenaggregate GROUP BY UNION DISTINCT HAVING |
Wird statisch. |
Wird statisch. |
Wird statisch. |
Fertig |
3 |
Die Abfrage generiert eine interne Arbeitstabelle (beispielsweise werden die Spalten einer ORDER BY-Klausel nicht von einem Index erfasst). |
Wird zum Keyset. |
|
Wird zum Keyset. |
5 |
4 |
Die Abfrage verweist auf Remotetabellen in Verbindungsservern. |
Wird zum Keyset. |
|
Wird zum Keyset. |
5 |
5 |
Die Abfrage verweist auf mindestens eine Tabelle ohne einen eindeutigen Index. Nur Transact-SQL-Cursor. |
|
Wird statisch. |
|
Fertig |
Hinweis |
---|
Schnelle Vorwärtscursor werden niemals konvertiert. |
Hinweis |
---|
Keysetgesteuerte- und dynamische Cursor werden nur konvertiert, wenn eine der zugrunde liegenden Basistabellen keinen eindeutigen Index aufweist oder die Abfrage die Schlüsselspalten der Basistabellen nicht direkt zurückgibt. Dies geschieht z. B., wenn die Abfrage Aggregatfunktionen oder Mengenoperatoren enthält. |