Teilen über


Verarbeiten von Ergebnissen (ODBC)

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics 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. Beispielsweise ruft SQLColumns 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. Für diese 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 aus 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 NOCOUNT-Option aktiviert 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 ein, SQL_SOPT_SS_NOCOUNT_STATUS, um zu melden, ob die NOCOUNT-Option 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 von 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 von 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 Meldungen empfängt, wird SQL_SUCCESS_WITH_INFO zurückgegeben, 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 ODBC-Treiber für SQL Server Native Client gibt SQL_ERROR für einen RAISERROR-Wert mit einem Schweregrad von 11 oder höher zurück. Ist der Schweregrad von RAISERROR 19 oder mehr, wird auch die Verbindung unterbrochen.

Um die Resultsets aus einer SQL-Anweisung zu verarbeiten, führen Sie die Anwendung aus:

  • 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)