Поделиться через


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

Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform 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."  

См. также

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