Cursorrowsetgröße
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
ODBC-Cursor sind nicht darauf beschränkt, nur jeweils eine Zeile abzurufen. Sie können in jedem Aufruf von SQLFetch oder SQLFetchScroll mehrere Zeilen abrufen. Wenn Sie mit einer Client-/Serverdatenbank wie Microsoft SQL Server arbeiten, ist es effizienter, mehrere Zeilen gleichzeitig abzurufen. Die Anzahl der zeilen, die bei einem Abruf zurückgegeben werden, wird als Rowsetgröße bezeichnet und mithilfe der SQL_ATTR_ROW_ARRAY_SIZE von SQLSetStmtAttr angegeben.
SQLUINTEGER uwRowsize;
SQLSetStmtAttr(m_hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)uwRowsetSize, SQL_IS_UINTEGER);
Cursor mit einer Rowsetgröße größer als 1 werden als Blockcursor bezeichnet.
Es gibt zwei Optionen zum Binden von Resultsetspalten für Blockcursor:
Spaltenweises Binden
Jede Spalte wird an ein Array von Variablen gebunden. Jedes Array verfügt über die gleiche Anzahl Elemente wie die Rowsetgröße.
Zeilenweise Bindung
Ein Array wird anhand von Strukturen aufgebaut, die die Daten und Indikatoren für alle Spalten in einer Zeile enthalten. Das Array verfügt über die gleiche Anzahl Strukturen wie die Rowsetgröße.
Wenn entweder spaltenweise oder zeilenweise Bindung verwendet wird, füllt jeder Aufruf von SQLFetch oder SQLFetchScroll die gebundenen Arrays mit Daten aus dem abgerufenen Rowset aus.
SQLGetData kann auch zum Abrufen von Spaltendaten aus einem Blockcursor verwendet werden. Da SQLGetData jeweils eine Zeile verwendet, muss SQLSetPos aufgerufen werden, um eine bestimmte Zeile im Rowset als aktuelle Zeile festzulegen, bevor SQLGetData aufgerufen wird.
Der ODBC-Treiber für SQL Server Native Client bietet eine Optimierung mithilfe von Rowsets, um schnell ein ganzes Resultset abzurufen. Um diese Optimierung zu verwenden, legen Sie die Cursorattribute auf ihre Standardwerte fest (vorwärts, schreibgeschützt, Rowsetgröße = 1), wenn SQLExecDirect oder SQLExecute aufgerufen wird. Der ODBC-Treiber für SQL Server Native Client richtet einen Standardergebnissatz ein. Beim Übertragen von Ergebnissen auf den Client ohne Bildlauf ist dies effizienter als Servercursor. Nachdem die Anweisung ausgeführt wurde, erhöhen Sie die Rowsetgröße und verwenden Sie entweder das spaltenweise oder zeilenweise Binden. Auf diese Weise kann SQL Server ein Standardergebnissatz verwenden, um Ergebniszeilen effizient an den Client zu senden, während der SQL Server Native Client ODBC-Treiber fortlaufend Zeilen aus den Netzwerkpuffern auf dem Client abruft.