使用 SQL Server 默认结果集
适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 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);
只要这些属性设置为默认值,SQL Server Native Client ODBC 驱动程序将使用 SQL Server 默认结果集。 默认结果集可用于 SQL Server 支持的任何 SQL 语句,并且是将整个结果集传输到客户端的最有效方法。
SQL Server 2005 (9.x) 引入了对多个活动结果集的支持(MARS):应用程序现在可以为每个连接设置多个活动默认结果集。 默认情况下未启用 MARS。
在 SQL Server 2005(9.x)之前,默认结果集不支持同一连接上的多个活动语句。 在连接上执行 SQL 语句后,服务器不会接受来自该连接上的客户端的命令(只是请求取消结果集的其余部分),直到处理结果集中的所有行。 若要取消部分处理的结果集的其余部分,请使用 fOption 参数设置为SQL_CLOSE调用 SQLCloseCursor 或 SQLFreeStmt。 若要完成部分处理的结果集并测试是否存在另一个结果集,请调用 SQLMoreResults。 如果 ODBC 应用程序在完全处理默认结果集之前尝试对连接句柄执行命令,则调用将生成SQL_ERROR,并返回对 SQLGetDiagRec 的 调用:
szSqlState: "HY000", pfNativeError: 0
szErrorMsg: "[Microsoft][SQL Server Native Client]
Connection is busy with results for another hstmt."