Использование результирующих наборов по умолчанию в SQL Server

Применимо к:SQL ServerAzure SQL DatabaseAzure Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Атрибутами курсора ODBC по умолчанию являются:

SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, SQL_CURSOR_FORWARD_ONLY, SQL_IS_INTEGER);  
SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, SQL_CONCUR_READ_ONLY, SQL_IS_INTEGER);  
SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, 1, SQL_IS_INTEGER);  

Каждый раз, когда эти атрибуты заданы по умолчанию, драйвер ODBC собственного клиента SQL Server использует результирующий набор SQL Server по умолчанию. Результирующие наборы по умолчанию можно использовать для любой инструкции SQL, поддерживаемой SQL Server, и является наиболее эффективным методом передачи всего результирующий набор клиенту.

SQL Server 2005 (9.x) представил поддержку нескольких активных результирующих наборов (MARS); Теперь приложения могут иметь несколько активных результирующих наборов по умолчанию для каждого подключения. По умолчанию режим MARS не включен.

До SQL Server 2005 (9.x) результирующие наборы по умолчанию не поддерживали несколько активных инструкций в одном подключении. После выполнения инструкции SQL для соединения сервер не принимает команд от клиента в этом соединении до тех пор, пока не будут обработаны все строки результирующего набора. Исключение составляют запросы на отмену оставшейся части результирующего набора. Чтобы отменить оставшуюся часть частично обработанного результированного набора, вызовите SQLCloseCursor или SQLFreeStmt с параметром fOption , равным SQL_CLOSE. Чтобы завершить частично обработанный результирующий набор и проверить наличие другого результированного набора, вызовите SQLMoreResults. Если приложение ODBC пытается выполнить команду в дескрипторе подключения до полной обработки результирующий набор по умолчанию, вызов создает SQL_ERROR и возвращает вызов SQLGetDiagRec :

szSqlState: "HY000", pfNativeError: 0  
szErrorMsg: "[Microsoft][SQL Server Native Client]  
                Connection is busy with results for another hstmt."  

См. также

Способы реализации курсоров