Verarbeiten von Ergebnissen (ODBC)
Wenn eine Anwendung eine SQL-Anweisung übermittelt, 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 über 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 normalerweise der Rückgabecode von SQLExecute oder SQLExecDirect der einzige Hinweis darauf, dass die Anweisung ordnungsgemäß ausgeführt wurde.
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 zu annullieren. Wenn eine Anwendung einen Batch oder eine gespeicherte Prozedur mit mehreren INSERT-, UPDATE- oder DELETE-Anweisungen ausführt, muss das Resultset jeder Änderungsanweisung unter Verwendung von SQLRowCount verarbeitet oder mit SQLMoreResults annulliert 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 die Anzahl der von einer Anweisung betroffenen Zeilen nicht zurück, und SQLRowCount gibt 0 (null) zurück. In der SQL Server Native Client ODBC-Treiberversion wurde eine treiberspezifische SQLGetStmtAttr-Option, SQL_SOPT_SS_NOCOUNT_STATUS, eingeführt, die meldet, ob die NOCOUNT-Option aktiviert oder deaktiviert ist. Jedes Mal, wenn SQLRowCount 0 zurückgibt, sollte die Anwendung SQL_SOPT_SS_NOCOUNT_STATUS testen. Wenn SQL_NC_ON zurückgegeben wird, zeigt der Wert 0 aus SQLRowCount lediglich an, dass SQL Server keine Zeilenanzahl zurückgegeben hat. Wird SQL_NC_OFF zurückgegeben, bedeutet dies, dass NOCOUNT deaktiviert ist, und der Wert 0 aus SQLRowCount zeigt an, dass keine Zeilen von der Anweisung betroffen waren. 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. Diese 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, gibt er SQL_SUCCESS_WITH_INFO zurück, um der Anwendung zu signalisieren, dass Informationsmeldungen verfügbar sind. Die Anwendung kann dann SQLGetDiagRec aufrufen, um diese Meldungen abzurufen. Die Transact-SQL-Anweisungen, die auf diese Weise funktionieren, sind folgende:
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 nach einem RAISERROR mit einem Schweregrad von mindestens 11 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
Siehe auch
Konzepte
SQL Server Native Client (ODBC)