Procesar resultados (ODBC)

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Una vez que una aplicación envía una instrucción SQL, SQL Server devuelve los datos resultantes como uno o varios conjuntos de resultados. Un conjunto de resultados es un conjunto de filas y columnas que coinciden con los criterios de la consulta. Las instrucciones SELECT, las funciones de catálogo y algunos procedimientos almacenados generan un conjunto de resultados que quedan disponibles para las aplicaciones en formato tabular. Si la instrucción SQL ejecutada es un procedimiento almacenado, un lote que contiene varios comandos o una instrucción SELECT que contiene palabras clave, habrá varios conjuntos de resultados que procesar.

Las funciones de catálogo de ODBC también pueden recuperar los datos. Por ejemplo, SQLColumns recupera datos sobre las columnas del origen de datos. Estos conjuntos de resultados pueden contener ninguna o más filas.

Otras instrucciones SQL, como GRANT o REVOKE, no devuelven conjuntos de resultados. Para estas instrucciones, el código devuelto de SQLExecute o SQLExecDirect suele ser la única indicación de que la instrucción se realizó correctamente.

Cada instrucción INSERT, UPDATE y DELETE devuelve un conjunto de resultados que contiene solamente el número de filas afectado por la modificación. Este recuento está disponible cuando la aplicación llama a SQLRowCount. ODBC 3.Las aplicaciones x deben llamar a SQLRowCount para recuperar el conjunto de resultados o SQLMoreResults para cancelarlo. Cuando una aplicación ejecuta un lote o un procedimiento almacenado que contiene varias instrucciones INSERT, UPDATE o DELETE, el conjunto de resultados de cada instrucción de modificación debe procesarse mediante SQLRowCount o cancelarse mediante SQLMoreResults. Estos recuentos se pueden cancelar incluyendo una instrucción SET NOCOUNT ON en el lote o procedimiento almacenado.

Transact-SQL incluye la instrucción SET NOCOUNT. Cuando se establece la opción NOCOUNT, SQL Server no devuelve los recuentos de las filas afectadas por una instrucción y SQLRowCount devuelve 0. La versión del controlador ODBC de SQL Server Native Client presenta una opción SQLGetStmtAttr específica del controlador, SQL_SOPT_SS_NOCOUNT_STATUS, para informar sobre si la opción NOCOUNT está activada o desactivada. Cada vez que SQLRowCount devuelve 0, la aplicación debe probar SQL_SOPT_SS_NOCOUNT_STATUS. Si se devuelve SQL_NC_ON, el valor de 0 de SQLRowCount solo indica que SQL Server no ha devuelto un recuento de filas. Si se devuelve SQL_NC_OFF, significa que NOCOUNT está desactivado y el valor de 0 de SQLRowCount indica que la instrucción no afecta a ninguna fila. Las aplicaciones no deben mostrar el valor de SQLRowCount cuando SQL_SOPT_SS_NOCOUNT_STATUS se SQL_NC_OFF. Los procedimientos almacenados o lotes de gran tamaño pueden contener varias instrucciones SET NOCOUNT de modo que los programadores no puedan suponer que SQL_SOPT_SS_NOCOUNT_STATUS sigue siendo constante. La opción debe probarse cada vez que SQLRowCount devuelve 0.

Otras instrucciones Transact-SQL devuelven los datos en mensajes, en lugar de en conjuntos de resultados. Cuando el controlador ODBC de SQL Server Native Client recibe estos mensajes, devuelve SQL_SUCCESS_WITH_INFO para que la aplicación sepa que hay mensajes informativos disponibles. A continuación, la aplicación puede llamar a SQLGetDiagRec para recuperar estos mensajes. Las instrucciones Transact-SQL que funcionan de esta manera son:

  • DBCC

  • SET SHOWPLAN (disponible con versiones anteriores de SQL Server)

  • SET STATISTICS

  • PRINT

  • RAISERROR

El controlador ODBC de SQL Server Native Client devuelve SQL_ERROR en raiseRROR con una gravedad de 11 o superior. Si la gravedad del RAISERROR es 19 o superior, se interrumpe además la conexión.

Para procesar los conjuntos de resultados desde una instrucción SQL, la aplicación:

  • Determina las características del conjunto de resultados.

  • Enlaza las columnas a variables de programa.

  • Recupera un valor único, una fila completa de valores o varias filas de valores.

  • Comprueba si hay más conjuntos de resultados y, en caso afirmativo, recorre de nuevo el bucle para determinar las características del nuevo conjunto de resultados.

El proceso de recuperar filas del origen de datos y devolverlas a la aplicación se denomina recuperación.

En esta sección

Consulte también

SQL Server Native Client (ODBC)
Temas de procedimientos para procesar resultados (ODBC)