Compartir a través de


Procesar los resultados (ODBC)

Después de 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 acerca de 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 de retorno de SQLExecute o SQLExecDirect es normalmente la única indicación de que la instrucción se ha ejecutado 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. Las aplicaciones ODBC 3.x deben llamar a SQLRowCount para recuperar el conjunto de resultados o a SQLMoreResults para cancelarlo. Cuando una aplicación ejecuta un lote o procedimiento almacenado que contiene varias instrucciones INSERT, UPDATE o DELETE, el conjunto de resultados de cada instrucción de modificación debe procesarse utilizando SQLRowCount o cancelarse utilizando 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 la opción NOCOUNT está activada, SQL Server no devuelve los recuentos de las filas afectadas por una instrucción y SQLRowCount devuelve 0. La versión de controlador ODBC de SQL Server Native Client introduce una opción SQLGetStmtAttr específica del controlador, SQL_SOPT_SS_NOCOUNT_STATUS, para notificar si la opción NOCOUNT está activada o desactivada. Siempre que SQLRowCount devuelve 0, la aplicación debe probar SQL_SOPT_SS_NOCOUNT_STATUS. Si devuelve SQL_NC_ON, el valor de 0 en SQLRowCount solamente indica que SQL Server no ha devuelto un recuento de filas. Si devuelve SQL_NC_OFF, significa que NOCOUNT está desactivado y el valor de 0 en SQLRowCount indica que la instrucción no afectó a ninguna fila. Las aplicaciones no deben mostrar el valor de SQLRowCount cuando SQL_SOPT_SS_NOCOUNT_STATUS es 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. Se debe probar la opción 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 permitir que la aplicación detecte que hay mensajes informativos disponibles. La aplicación puede llamar después 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 un 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 de 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 captura.

En esta sección

Vea también

Conceptos

SQL Server Native Client (ODBC)

Otros recursos

Temas de procedimientos para procesar resultados (ODBC)