Erstellen von SQL-Anweisungen für Cursor
Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)
Der SQL Server Native Client ODBC-Treiber verwendet Servercursor, um die in der ODBC-Spezifikation definierte Cursorfunktionalität zu implementieren. Eine ODBC-Anwendung steuert das Cursorverhalten mithilfe von SQLSetStmtAttr , um verschiedene Anweisungsattribute festzulegen. Nachfolgend sind die Attribute und ihre Standardwerte aufgeführt.
attribute | Standard |
---|---|
SQL_ATTR_CONCURRENCY | SQL_CONCUR_READ_ONLY |
SQL_ATTR_CURSOR_TYPE | SQL_CURSOR_FORWARD_ONLY |
SQL_ATTR_CURSOR_SCROLLABLE | SQL_NONSCROLLABLE |
SQL_ATTR_CURSOR_SENSITIVITY | SQL_UNSPECIFIED |
SQL_ATTR_ROW_ARRAY_SIZE | 1 |
Wenn diese Optionen zum Zeitpunkt der Ausführung einer SQL-Anweisung auf ihre Standardwerte festgelegt sind, verwendet der SQL Server Native Client ODBC-Treiber keinen Servercursor zum Implementieren des Resultsets, sondern ein Standardergebnisset. Wenn eine dieser Optionen zum Zeitpunkt der Ausführung einer SQL-Anweisung von den Standardwerten geändert wird, versucht der SQL Server Native Client ODBC-Treiber, einen Servercursor zum Implementieren des Resultsets zu verwenden.
Standardergebnissätze unterstützen alle Transact-SQL-Anweisungen. Es gibt keine Einschränkungen hinsichtlich der Arten von SQL-Anweisungen, die bei Verwendung eines Standardresultsets ausgeführt werden können.
Servercursor unterstützen nicht alle Transact-SQL-Anweisungen. Servercursor unterstützen keine SQL-Anweisungen, die mehrere Resultsets generieren.
Die folgenden Typen von Anweisungen werden von Serversursorn nicht unterstützt:
Batches
Aus zwei oder mehr einzelnen SQL SELECT-Anweisungen erstellte SQL-Anweisungen, Beispiel.:
SELECT * FROM Authors; SELECT * FROM Titles
Gespeicherte Prozeduren mit mehreren SELECT-Anweisungen
SQL-Anweisungen, die eine gespeicherte Prozedur ausführen, die mehr als eine SELECT-Anweisung enthält Hierzu gehören auch SELECT-Anweisungen, mit denen Parameter- oder Variablenwerte abgerufen werden.
Keywords
SQL-Anweisungen, die die Schlüsselwörter FOR BROWSE oder INTO enthalten.
Wenn in SQL Server eine SQL-Anweisung, die einer dieser Bedingungen entspricht, mit einem Servercursor ausgeführt wird, wird der Servercursor implizit in ein Standardergebnissatz konvertiert. Nachdem SQLExecDirect oder SQLExecute SQL_SUCCESS_WITH_INFO zurückgegeben haben, werden die Cursorattribute auf ihre Standardeinstellungen zurückgesetzt.
SQL-Anweisungen, die nicht in die oben genannten Kategorien passen, können mit beliebigen Anweisungsattributeinstelllungen ausgeführt werden. Sie funktionieren sowohl mit einem Standardresultset als auch einem Servercursor gleich gut.
Errors
In SQL Server 7.0 und höher generiert ein Versuch, eine Anweisung auszuführen, die mehrere Resultsets erzeugt, SQL_SUCCESS_WITH INFO und die folgende Meldung:
SqlState: 01S02"
pfNative: 0
szErrorMsgString: "[Microsoft][SQL Server Native Client][SQL Server]
Cursor type changed."
ODBC-Anwendungen, die diese Nachricht empfangen, können SQLGetStmtAttr aufrufen, um die aktuellen Cursoreinstellungen zu bestimmen.
Der Versuch, bei Verwendung von Servercursorn eine Prozedur mit mehreren SELECT-Anweisungen auszuführen, erzeugt folgenden Fehler:
SqlState: 42000
pfNative: 16937
szErrorMsgString: [Microsoft][SQL Server Native Client][SQL Server]
A server cursor is not allowed on a stored procedure
with more than one SELECT statement in it. Use a
default result set or client cursor.
Der Versuch, bei Verwendung von Servercursorn einen Batch mit mehreren SELECT-Anweisungen auszuführen, erzeugt folgenden Fehler:
SqlState: 42000
pfNative: 16938
szErrorMsgString: [Microsoft][SQL Server Native Client][SQL Server]
sp_cursoropen. The statement parameter can only
be a single SELECT statement or a single stored
procedure.
ODBC-Anwendungen, die diese Fehler erhalten, müssen alle Cursoranweisungsattribute auf die jeweilige Standardeinstellung zurücksetzen, bevor sie die Anweisung auszuführen versuchen.
Weitere Informationen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für