Verarbeiten von Ergebnissen (ODBC)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Nachdem eine Anwendung eine SQL-Anweisung übermittelt hat, gibt SQL Server alle resultierenden Daten als ein oder mehrere Resultsets zurück. Ein Resultset ist ein Satz von Zeilen und Spalten, die den Kriterien der Abfrage entsprechen. SELECT-Anweisungen, Katalogfunktionen sowie einige gespeicherte Prozeduren erzeugen Resultsets, die für eine Anwendung in der Form von tabellarischen Daten verfügbar gemacht werden. Wenn es sich bei der ausgeführten SQL-Anweisung um eine gespeicherte Prozedur, einen Batch mit mehreren Befehlen oder eine SELECT-Anweisung mit Schlüsselwörtern handelt, ergeben sich daraus mehrere zu verarbeitende Resultsets.

Auch ODBC-Katalogfunktionen können Daten abrufen. SqlColumns ruft beispielsweise Daten zu Spalten in der Datenquelle ab. Diese Resultsets können 0 (null) oder mehr Zeilen enthalten.

Andere SQL-Anweisungen, z. B. GRANT oder REVOKE, geben keine Resultsets zurück. Bei diesen Anweisungen ist der Rückgabecode von SQLExecute oder SQLExecDirect in der Regel der einzige Hinweis, dass die Anweisung erfolgreich war.

Jede INSERT-, UPDATE- und DELETE-Anweisung gibt ein Resultset zurück, das nur die Anzahl der von der Änderung betroffenen Zeilen enthält. Diese Anzahl wird verfügbar gemacht, wenn die Anwendung SQLRowCount aufruft. ODBC 3. x-Anwendungen müssen entweder SQLRowCount aufrufen, um das Resultset abzurufen, oder SQLMoreResults , um es abzubrechen. Wenn eine Anwendung einen Batch oder eine gespeicherte Prozedur ausführt, die mehrere INSERT-, UPDATE- oder DELETE-Anweisungen enthält, muss das Resultset jeder Änderungsanweisung mithilfe von SQLRowCount verarbeitet oder mit SQLMoreResults abgebrochen werden. Die Anzahlangaben können durch eine SET NOCOUNT ON-Anweisung im Batch oder in der gespeicherten Prozedur annulliert werden.

Transact-SQL enthält die SET NOCOUNT-Anweisung. Wenn die Option NOCOUNT auf festgelegt ist, gibt SQL Server nicht die Anzahl der Zeilen zurück, die von einer -Anweisung betroffen sind, und SQLRowCount gibt 0 zurück. Die SQL Server Native Client ODBC-Treiberversion führt eine treiberspezifische SQLGetStmtAttr-Option SQL_SOPT_SS_NOCOUNT_STATUS ein, um zu melden, ob die OPTION NOCOUNT aktiviert oder deaktiviert ist. Wenn SQLRowCount 0 zurückgibt, sollte die Anwendung SQL_SOPT_SS_NOCOUNT_STATUS testen. Wenn SQL_NC_ON zurückgegeben wird, gibt der Wert 0 aus SQLRowCount nur an, dass SQL Server keine Zeilenanzahl zurückgegeben hat. Wenn SQL_NC_OFF zurückgegeben wird, bedeutet dies, dass NOCOUNT deaktiviert ist und der Wert 0 aus SQLRowCount angibt, dass die Anweisung keine Zeilen beeinflusst hat. Anwendungen sollten den Wert von SQLRowCount nicht anzeigen, wenn SQL_SOPT_SS_NOCOUNT_STATUS SQL_NC_OFF ist. Große Batches oder gespeicherte Prozeduren können mehrere SET NOCOUNT-Anweisungen enthalten. Daher kann der Programmierer nicht davon ausgehen, dass SQL_SOPT_SS_NOCOUNT_STATUS konstant bleibt. Die Option sollte jedes Mal getestet werden , wenn SQLRowCount 0 zurückgibt.

Mehrere andere Transact-SQL-Anweisungen geben ihre Daten in Meldungen statt in Resultsets zurück. Wenn der SQL Server Native Client ODBC-Treiber diese Nachrichten empfängt, gibt er SQL_SUCCESS_WITH_INFO zurück, um der Anwendung mitzuteilen, dass Informationsmeldungen verfügbar sind. Die Anwendung kann dann SQLGetDiagRec aufrufen, um diese Nachrichten abzurufen. Die Transact-SQL-Anweisungen, die auf diese Weise funktionieren, sind:

  • DBCC

  • SET SHOWPLAN (mit früheren Versionen von SQL Server verfügbar)

  • SET STATISTICS

  • PRINT

  • RAISERROR

Der SQL Server Native Client ODBC-Treiber gibt SQL_ERROR für einen RAISERROR mit einem Schweregrad von 11 oder höher zurück. Ist der Schweregrad von RAISERROR 19 oder mehr, wird auch die Verbindung unterbrochen.

Zum Verarbeiten der Resultsets aus einer SQL-Anweisung geht die Anwendung folgendermaßen vor:

  • Sie bestimmt die Charakteristika des Resultsets.

  • Sie bindet die Spalten an Programmvariable.

  • Sie ruft einen einzelnen Wert, eine ganze Zeile mit Werten oder mehrere Zeilen mit Werten ab.

  • Sie überprüft, ob weitere Resultsets vorhanden sind, und wenn dies der Fall ist, ermittelt sie die Charakteristika des neuen Resultsets.

Der Prozess des Abrufens von Zeilen aus der Datenquelle und deren Rückgabe an die Anwendung wird "Fetching" (Abrufen) genannt.

In diesem Abschnitt

Weitere Informationen

SQL Server Native Client (ODBC)
Vorgehensweisen zum Verarbeiten von Ergebnissen (ODBC)