使用 SQL Server 默认结果集

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics 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);  

每当这些属性设置为默认值时,SQL Server Native Client ODBC 驱动程序将使用SQL Server默认结果集。 默认结果集可用于SQL Server支持的任何 SQL 语句,并且是将整个结果集传输到客户端的最有效方法。

SQL Server 2005 (9.x) 引入了对多个活动结果集的支持, (MARS) ;应用程序现在每个连接可以有多个活动默认结果集。 默认情况下未启用 MARS。

在 SQL Server 2005 (9.x) 之前,默认结果集不支持同一连接上的多个活动语句。 对连接执行 SQL 语句后,服务器不接受来自该连接上的客户端的命令(取消结果集剩余内容的请求除外),直到结果集中的所有行均处理完毕。 若要取消部分处理的结果集的其余部分,请调用 SQLCloseCursorSQLFreeStmt ,并将 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."  

另请参阅

如何实现游标