Controlador SQL Server de ODBC

Novedades

Información general

Requisitos del sistema

Instalación

Orígenes de datos de SQL Server

Conexión a un origen de datos

Atributos del controlador SQL Server (Valores devueltos por SQLGetInfo)

Soporte del SQL

Soporte de tipos de datos

Uso de cursores ODBC

Mensajes de error

Funciones seleccionadas: Notas

Implementación del controlador: Notas

Glosario

Referencias


Instalación

Instalación del controlador SQL Server

Actualización de los procedimientos almacenados en catálogo


Orígenes de datos de SQL Server

Instalación de SQL Server de ODBC

Eliminación de un origen de datos

Uso de SQLConfigDataSource para cambiar orígenes de datos


Conexión a un origen de datos

Conexión a un origen de datos SQL Server

SQLConnect

SQLDriverConnect

SQLBrowseConnect

Opciones de conexión específicas del controlador


Soporte del SQL

Limitaciones de la gramática del SQL

Gramática del SQL de ODBC no admitida

Resolución de nulidad


Soporte de tipos de datos

Uso de tipos de datos

Asignación de tipos de datos

Resolución de nulidad


Uso de cursores ODBC

Uso de cursores ODBC

Creación de cursores

SQLSetStmtOption

SQLSetScrollOptions

SQLSetConnectOption

SQLSetCursorName

SQLGetCursorName

SQLGetStmtOption

SQLGetInfo

Recuperación de datos de los cursores

SQLFetch

SQLExtendedFetch

SQLRowCount

Actualización de cursores

SQLSetPos

SQLRowCount

Cierre de cursores

SQLFreeStmt

SQLTransact


Funciones seleccionadas: Notas

Implementación de funciones API de ODBC

SQLColAttributes, SQLDescribeCol y SQLNumResultCols

SQLConfigDataSource

SQLPrepare

SQLBrowseConnect

SQLConnect

SQLDriverConnect

SQLParamOptions

SQLDescribeParam


Implementación del controlador: Notas

hstmt activo

Biblioteca de cursor

Errores aritméticos

Transacciones en modo de realización manual

Llamadas a procedimientos remotos


Novedades

Las siguientes características del controlador SQL Server de ODBC son nuevas para la versión 2.5.

Pleno cumplimiento de nivel 2

El controlador SQL Server admite todas las API ODBC de Nivel 2. El soporte de las siguientes API es nuevo en la versión 2.5.

SQLParamOptions

SQLDescribeParam

SQLSetPos

SQLExtendFetch

Si desea detalles sobre estas API, consulte este archivo de Ayuda y la Referencia de API de ODBC.

Cursores del servidor

El controlador SQL Server utiliza automáticamente cursores del servidor (estáticos, de conjunto de teclas y dinámicos) implementados en SQL Server 6.0. Esto da como resultado una mejora del rendimiento, una semántica del cursor más limpia (comparada con la biblioteca del cursor de versiones anteriores) y un uso de la memoria más eficiente en el cliente. Los cursores del servidor no se utilizan en los siguientes casos:

•	El usuario establece ODBC_CURSORS a SQL_CUR_USE_ODBC.

•	El usuario declara que el cursor sea de sólo envío, de sólo lectura, conjunto de filas = 1.

•	El usuario declara que el cursor sea estático y actualizable.

Una ventaja clave de utilizar los cursores del servidor es que puede disponer de múltiples instrucciones activas (varios cursores abiertos) en una misma conexión. Si desea más detalles sobre el uso de los cursores del servidor SQL Server 6.0 con funciones ODBC, consulte Uso de cursores ODBC.

Tipos de datos decimal y numérico

El controlador admite un uso pleno de los tipos de datos decimal y numérico, y proporciona las funciones de conversión apropiadas desde y hacia otros tipos de datos.

Las siguientes funciones de ODBC devuelven información sobre tipos de datos:

•	SQLGetInfo

•	SQLGetTypeInfo

•	SQLColumns

•	SQLDescribeCol

•	SQLProcedureColumns

•	SQLSpecialColumns

Las siguientes funciones de ODBC pueden implicar conversiones entre tipos de datos del SQL de ODBC y del C de ODBC:

•	SQLBindCol

•	SQLBindParameter

•	SQLGetData

•	SQLPutData

RPC en lotes

El controlador incluye automáticamente en lotes las peticiones RPC al servidor cuando resulta adecuado. Esto puede reducir drásticamente el número de viajes hacia el servidor y, en muchos casos, dar como resultado una mejora del rendimiento de orden de magnitud. El controlador incluye en lotes las peticiones RPC cuando el usuario emite un lote de invocaciones canónicas a procedimiento almacenado o cuando utiliza SQLParamOptions junto con SQLPrepare/SQLExecute o con una invocación canónica a procedimiento.

Instrucciones Prepare/Execute

El controlador crea procedimientos almacenados temporales (en contraste con los procedimientos almacenados normales de versiones anteriores) en una SQLPrepare. Estos procedimientos se eliminan automáticamente cuando la conexión termina de manera irregular. Anteriormente, los procedimientos almacenados creador en una instrucción Prepare quedaban huérfanos en el servidor cuando la conexión terminaba de manera anormal. Además, el controlador proporciona a los usuarios una opción de conexión específica del controlador (SQL_USE_PROCEDURE_FOR_PREPARE) que indica el momento en que se deben eliminar estos procedimientos almacenados temporales. De manera predeterminada, se eliminan en el momento en que se libera la conexión. Cuando está emitiendo varias instrucciones prepare/execute en una conexión y necesita conservar el uso de TempDB, puede hacer que el controlador elimine estos procedimientos en el momento en que se cierra un hstmt.

Uso de las características de SQL Server 6.0

El controlador aprovecha las siguientes características nuevas de SQL Server v6.0.

•	El controlador utiliza la instrucción "Establecer nivel de aislamiento de transacción" para:

•	exponer el nivel de aislamiento "Lectura no realizada"

•	exigir una serialización estricta.

En versiones anteriores, el controlador insertaba "manualmente" un HoldLock en la cláusula FROM de las instrucciones SELECT cuando el usuario había solicitado la opción "Serializable".

•	El controlador utiliza la instrucción SET FMTONLY para implementar las API SQLDescribeCol y SQLColAttributes. Anteriormente, estas API se implementaban emitiendo una consulta "ficticia" que no devolvía ningún resultado.

•	El controlador exige el uso de "Identificadores citados en ANSI" y emite la instrucción SET QUOTED_IDENTIFIER ON durante la secuencia de inicio.

•	El controlador expone el IEF ANSI '89 de SQL Server utilizando las API SQLPrimaryKeys y SQLForeignKeys.

•	El controlador usa la instrucción "Establecer ANSI_NULL_DFLT_ON" para exigir la nulidad predeterminada de acuerdo con ANSI para las columnas. En versiones anteriores, el controlador insertaba "manualmente" la palabra clave Null tras las especificaciones de columna.

•	El controlador admite parámetros de texto/imagen en procedimientos almacenados. La invocación de estos procedimientos almacenados se maneja como una petición RPC en lugar de como un evento del lenguaje, como en las versiones anteriores.

•	El controlador utiliza automáticamente el conjunto de tamaño de paquete predeterminado en el servidor si no se especifica otro mediante la SQLSetConnectOption de ODBC.

Atributo de identidad

El controlador expone el Atributo de identidad de SQL Server 6.0 utilizando el descriptor SQL_COLUMN_AUTO_INCREMENT en SQLColAttributes y la columna AUTO_INCREMENT en el conjunto de resultados SQLGetTypeInfo. SQL Server considera a la identidad como un atributo, mientras que ODBC la trata como un tipo de datos. Para resolver esta discordancia, SQLGetTypeInfo devuelve estos cinco tipos de datos nuevos:

•	int identity

•	smallint identity

•	tinyint identity

•	decimal identity

•	numeric identity

Procesamiento de texto/imagen

El controlador proporciona diversas mejoras para el procesamiento de datos de texto e imagen.

•	Cuando se conecta a SQL Server 6.0, el controlador utiliza la nueva función UPDATETEXT en el servidor para admitir la actualización de las columnas de texto/imagen de todas las filas cuando la instrucción UPDATE afecta a múltiples filas. Cuando está conectado a SQL Server 4.2x, solamente se actualizarán las columnas de texto/imagen de la primera fila (de una instrucción UPDATE de múltiples filas).

•	El controlador expone una opción de instrucción específica del controlador (SQL_TEXTPTR_LOGGING) para desactivar el registro de operaciones de texto/imagen.

•	Al utilizar cursores de servidor, el controlador no recupera datos de texto/imagen para las columnas no vinculadas a menos que el usuario emita explícitamente la llamada SQLGetData.

•	Cuando está conectado a SQL Server 6.0, SQLExecDirect y SQLExecute no requieren la macro SQL_LEN_DATA_AT_EXEC, pero el uso de dicha macro logra mayor eficiencia.

Mejoras del rendimiento

El controlador ha agregado las siguientes características relacionadas con el rendimiento:

•	Mejora del tiempo de conexiónEl controlador incluye en lotes las consultas informativas al servidor cuando establece una conexión que reduce el número de viajes al servidor. La opción de conexión rápida ya no es necesaria ni compatible.

•	El controlador hace un mejor uso de la memoria (eliminando las copias) para un procesamiento más rápido de los resultados.

•	Aritmética de 64 bitsEl controlador de 32 bits utiliza aritmética de 64 bits para conversiones de datos a/desde los tipos de datos moneda, decimal y numérico.

Seguridad integrada

El controlador proporciona una opción específica del controlador (SQL_INTEGRATED_SECURITY) para solicitar una conexión con seguridad del SQL Server 6.0.

SQLExtendedFetch para SQL Server 4.2a

El controlador admite la API SQLExtendedFetch (cursores de sólo envío, sólo lectura) para SQL Server 4.21a.

DSN

Cuando instala el controlador de 32 bits, dispone de la opción de convertir los DSN existentes de 16 bits a DSN de 32 bits para que los puedan utilizar las aplicaciones de 32 bits. Además, el controlador utiliza el valor OEMtoANSI de la Utilidad de configuración del cliente como valor predeterminado durante la definición de un nuevo DSN.

DayOfWeek

El controlador admite la función canónica DayOfWeek definida en ODBC.

Parámetros literales en procedimientos

El controlador ejecuta invocaciones canónicas de procedimientos que tienen parámetros literales como peticiones RPC. En versiones anteriores, a menos que la invocación tuviera todos los marcadores de parámetros, la petición se emitía como evento del lenguaje.

Cambios de SQLGetInfo

Si desea más información, consulte la función SQLGetInfo.

INSTCAT.SQL

Los procedimientos almacenados en catálogo exponen la nueva funcionalidad agregada en la versión 2.5 y mejoran el rendimiento respecto a las versiones anteriores.

DBCS

El controlador versión 2.5 está preparado para DBCS.

Errores aritméticos

El controlador versión 2.5 utiliza SET ARITHABORT ON para proporcionar una mejor semántica de ODBC.

SDK ODBC

El SDK ODBC se incluye como componente de Microsoft SQL Workstation versión 6.0.


Información general

Microsoft SQL Server es un sistema de administración de bases de datos (DBMS) relacionales multiusuario que se ejecuta en el sistema operativo Microsoft Windows NT. Existen versiones tanto de 16 bits como de 32 bits del controlador SQL Server ODBC. Se utiliza el Lenguaje de consulta estructurado (SQL) para acceder a los datos de una base de datos SQL Server. Las estaciones de trabajo cliente se comunican con SQL Server a través de una red, como puede ser Windows NT Server, Novell NetWare, Banyan VINES o TCP/IP.

El controlador SQL Server permite a las aplicaciones acceder a los datos incluidos en bases de datos Microsoft SQL Server a través de la interface Conectividad abierta de bases de datos (ODBC).

Observe que el controlador SQL Server de 32 bits está preparado para thread. El controlador serializará el acceso compartido por múltiples threads a objetos hstmt, hdbc y henv compartidos. No obstante, el programa ODBC continúa siendo responsable del mantenimiento en la secuencia adecuada de las operaciones incluidas en las instrucciones y los espacios de conexión, aún cuando el programa utiliza múltiples threads.

Esta es la arquitectura aplicación/controlador para entornos de 16 bits:

                  Aplicación (16 bits)           Aplicación (32 bits en Win32s)
|	|
Administrador de controladores Thunking de 32 bits
(ODBC32.DLL)
|	|
DLL Thunking universal de ODBC
(ODBC16UT.DLL)
|	|
Administrador de controladores ODBC
(ODBC.DLL)
|
Biblioteca de cursor ODBC (opcional)
(ODBCCURS.DLL)
|
Controlador SQL Server (16 bits)
(SQLSRVR.DLL)
|
Biblioteca de red
(DBNMP3.DLL, DBMSSPX3.DLL, etc.)
|
Software de red
(Windows NT, Windows para Trabajo en Grupo, Novell NetWare, etc.)
|
Microsoft SQL Server

Esta es la arquitectura aplicación/controlador para entornos de 32 bits:

Aplicación (16 bits)                        Aplicación (32 bits)
|	|
Administrador de controladores ODBC	Administrador de controladores ODBC
(ODBC.DLL)	(ODBC32.DLL)
|	|
Biblioteca de cursor ODBC (opcional)	Biblioteca de cursor ODBC (opcional)
(ODBCCURS.DLL)	(ODBCCR32.DLL)
|	|
DLL Thunking genérica ODBC de 16 bits
(ODBC16GT.DLL)
|	|
DLL Thunking genérica ODBC de 32 bits
(ODBC32GT.DLL)
|	|
Controlador de servidor SQL (32 bits)
(SQLSRV32.DLL)
|
Biblioteca de red
(DBNMPNTW.DLL, DBMSSPXN.DLL, etc.)
|
Software de red
(Windows NT, Windows para Trabajo en Grupo, Novell NetWare, etc.)
|
Microsoft SQL Server

Thunking significa interceptar una llamada a función, realizar un procesamiento especial para la conversión entre código de 16 y de 32 bits, y a continuación transferir el control a una función de destino.

Vea también

Instalación del controlador SQL Server

Instalación de SQL Server de ODBC

Conexión a un origen de datos de SQL Server

Requisitos del sistema


Requisitos del sistema

Para acceder a los datos de SQL Server, debe disponer de lo siguiente:

•	El controlador SQL Server.

•	Microsoft SQL Server.

•	Software de red en los PC donde reside el controlador y el SQL Server; no es necesario al establecer la conexión con un SQL Server local (no integrado en red).

A continuación se indican los requisitos de hardware y software de cada uno de los componentes mencionados.

Controlador SQL Server

Requisitos de hardware:

•	Un PC con arquitectura normalizada (ISA), como IBM PC/AT o compatible,
O bien

•	Un PC con arquitectura de micro canal (MCA), como IBM PS/2 o compatible,
O bien

•	Un PC con arquitectura normalizada extendida (EISA) con un microprocesador 80286, 80386, 80486 o Pentium,
O bien

•	Un microprocesador Alpha AXP o MIPS.

•	2 MB de RAM como mínimo; se recomienda disponer de 4 MB.

•	Una unidad de disco duro con aproximadamente 300 KB de espacio en disco para el controlador SQL Server y el Administrador de controladores ODBC.

Requisitos de software:

•	Microsoft Windows versión 3.1 o posterior (controlador de 16 bits)

•	Microsoft Windows 95 o Windows NT 3.5 o posterior (controlador de 32 bits)

Si desea información sobre el hardware y el software necesarios para clientes SQL Server, consulte Instalación de Microsoft SQL Server.

SQL Server

Si desea utilizar el controlador SQL Server para acceder a los datos de bases de datos Microsoft SQL Server, debe disponer de Microsoft SQL Server versión 4.21A o posterior. Los procedimientos almacenados en catálogo deben estar instalados en su SQL Server. Quizás necesite instalar los procedimientos almacenados en catálogo entregados con este controlador al utilizar la versión 4.21A de Microsoft SQL Server (consulte el tema Actualización de los procedimientos almacenados en catálogo). Si desea información sobre el hardware y el software necesarios para SQL Server, consulte Instalación de Microsoft SQL Server.

Software de red

El software de red es necesario para conectar los PC donde residen el controlador SQL Server y el SQL Server. Para conectarse a un SQL Server, puede utilizar Microsoft Windows NT, Microsoft Windows para Trabajo en Grupo o una red compatible como IBM LAN Server o DEC Pathworks, Novell NetWare o Banyan VINES. Si desea información sobre el hardware y el software que necesita cada red, consulte la documentación de la red.

El controlador SQL Server se comunica con el software de red a través de la interface de Biblioteca de red SQL Server, que reside en una biblioteca de vínculos dinámicos (DLL) Biblioteca de red. Para obtener más información sobre las configuraciones de red y los archivos de Biblioteca de red compatibles, consulte Instalación de Microsoft SQL Server.

Vea también

Instalación del controlador SQL Server


Instalación del controlador SQL Server

El controlador ODBC SQL Server se instala automáticamente al instalar el software cliente SQL Server 6.0 en un PC que ejecute Windows NT, Windows 95 o Windows 3.11. Si desea más información sobre la instalación del software cliente SQL Server 6.0, consulte Instalación de Microsoft SQL Server.

Si necesita reinstalar solamente el controlador ODBC SQL Server, puede ejecutar el programa setup de ODBC del subdirectorio ODBC o del directorio de instalación apropiado del cliente.

Para utilizar el controlador SQL Server, normalmente se agrega un origen de datos para cada instalación de SQL Server en la cual desea acceder a datos. Consulte el tema Orígenes de datos de SQL Server.

Si está utilizando Microsoft SQL Server versión 4.21A, el INSTCAT.SQL incluido con este controlador incluye modificaciones mínimas en los procedimientos almacenados en catálogo. Para instalar los procedimientos almacenados en catálogo actualizados, siga las instrucciones para Actualización de los procedimientos almacenados en catálogo.

Vea también

Orígenes de datos de SQL Server

Requisitos del sistema


Mensajes de error

Cuando se produce un error, el controlador SQL Server devuelve el número de error nativo, el SQLSTATE (un código de error ODBC) y un mensaje de error. El controlador deriva esta información tanto de los errores detectados por el controlador como de los errores devueltos por SQL Server.

Números de error nativo

Para los errores que se producen en el origen de datos (devueltos por SQL Server), el controlador SQL Server devuelve el número de error nativo que le devuelve a él SQL Server. En el caso de errores detectados por el controlador, el controlador SQL Server devuelve un número de error nativo de cero. Si desea un listado de los números de error nativo, consulte la columna de error de la tabla del sistema mensajessis en la base de datos maestra de SQL Server.

SQLSTATE (códigos de error de ODBC)

Para los errores que se producen en el origen de datos y que SQL Server detecta y devuelve, el controlador SQL Server establece una correspondencia entre el número de error nativo devuelto y el correspondiente SQLSTATE. Si un número de error nativo no tiene ningún código de error ODBC la que asignarse, el controlador SQL Server devuelve SQLSTATE 37000 (error de sintaxis o violación de acceso). Para los errores detectados por el controlador, el controlador SQL Server genera el SQLSTATE apropiado.

Mensajes de error

Para los errores que ocurren en el origen de datos y que SQL Server detecta y devuelve, el controlador SQL Server devuelve un mensaje de error basándose en el mensaje devuelto por SQL Server. En el caso de errores que ocurren en el controlador SQL Server o en el Administrador de controladores, el controlador SQL Server devuelve un mensaje de error basado en el texto asociado al SQLSTATE. Si desea ver una lista de mensajes de error que puede devolver SQL Server (pero no el controlador SQL Server), consulte la columna de descripción de la tabla del sistema mensajessis en la base de datos maestra de SQL Server.

Sintaxis

Los mensajes de error tienen el siguiente formato:

[proveedor][componente-ODBC][origen-datos]texto-mensaje

donde los prefijos entre corchetes ([ ]) identifican el lugar donde se ha producido el error, según se define en la siguiente tabla.

Nota  Cuando el error se produce en el origen de datos, los prefijos [proveedor] y [componente_ODBC] identifican el proveedor y el nombre del componente ODBC que recibió el error del origen de datos.

Origen de datos	Prefijo	Valor
Administrador de controladores	[proveedor] [componente_ODBC] [origen_de_datos]	[Microsoft] [Administrador de controladores ODBC] No disponible
Biblioteca de cursor	[proveedor] [componente_ODBC] [origen_de_datos]	[Microsoft] [Biblioteca de cursor ODBC] No disponible
Controlador SQL Server	[proveedor] [componente_ODBC] [origen_de_datos]	[Microsoft] [Controlador SQL Server ODBC] No disponible
SQL Server	[proveedor] [componente_ODBC] [origen_de_datos]	[Microsoft] [Controlador SQL Server ODBC] [SQL Server]


Actualización de procedimientos almacenados en catálogo

El controlador SQL Server utiliza un conjunto de procedimientos almacenados del sistema, denominados procedimientos almacenados en catálogo, para obtener información del catálogo del sistema SQL Server. Microsoft SQL Server instala automáticamente los procedimientos almacenados en el catálogo al instalar o actualizar SQL Server. El archivo INSTCAT.SQL proporcionado con este controlador incluye actualizaciones mínimas a los procedimientos almacenados en catálogo. Se recomienda, pero no es obligatorio, hacer que el administrador del sistema SQL Server actualice los procedimientos almacenados en catálogo en un servidor que ejecute Microsoft SQL Server versión 4.21A.

Para actualizar los procedimientos almacenados en catálogo, el administrador del sistema debe ejecutar un archivo de comandos mediante la utilidad isql (consulte los pasos descritos más abajo). Antes de efectuar ningún cambio en la base de datos maestra, es recomendable que el administrador del sistema realice una copia de seguridad. Para ejecutar isql, el PC debe estar instalado como estación de trabajo cliente para Microsoft SQL Server.

Para actualizar los procedimientos almacenados en catálogo

1.	En la línea de comandos, use la utilidad isql para ejecutar el archivo de comandos INSTCAT.SQL. Por ejemplo, C:> ISQL /Usa /Pas_contraseña /Snombre_servidor /iubicación\INSTCAT.SQL

donde

ubicación es la ruta completa de la ubicación de INSTCAT.SQL. Puede utilizar el INSTCAT.SQL de un SQL Server 6.0 instalado (la ubicación predeterminada es C:\SQL60\INSTALL) o del CD de SQL Server 6.0 (la ubicación predeterminada es D:\plataforma, donde D es la letra de la unidad de CD y plataforma es el directorio adecuado de plataforma del servidor, como I386).

as_contraseña es la contraseña del administrador del sistema.

nombre_servidor es el nombre del servidor donde reside SQL Server.

El archivo de comandos INSTCAT.SQL genera mensajes. Ignórelos.

El archivo de comandos INSTCAT.SQL falla cuando no hay espacio suficiente en la base de datos maestra para almacenar los procedimientos almacenados en catálogo o para registrar los cambios en los procedimientos existentes. Si falla el archivo de comandos INSTCAT.SQL, póngase en contacto con el administrador del sistema.

El controlador SQL Server utiliza los siguientes procedimientos almacenados en catálogo.

Procedimiento almacenado	Devuelve
sp_column_privileges	Información sobre privilegios de columna para las tablas especificadas
sp_columns	Información sobre columnas para las tablas especificadas
sp_databases	Una lista de bases de datos
sp_datatype_info	Información sobre los tipos de datos admitidos
sp_fkeys	Información sobre claves externas lógicas
sp_pkeys	Información sobre claves principales
sp_server_info	Una lista de nombres de atributos y valores coincidentes para el servidor
sp_special_columns	Información para una sola tabla acerca de columnas de dicha tabla que tengan atributos especiales
sp_sproc_columns	Información de columna para un procedimiento almacenado
sp_statistics	Una lista de índices para una sola tabla
sp_stored_procedures	Una lista de procedimientos almacenados
sp_table_privileges	Información sobre los privilegios de tabla para las tablas especificadas
sp_tables	Una lista de objetos que se pueden consultar
Si desea información adicional sobre los procedimientos almacenados en catálogo, consulte Microsoft SQL Server Transact-SQL Reference.


Instalación de SQL Server de ODBC

Para acceder al cuadro de diálogo Instalación de SQL Server de ODBC

1.	En el Panel de control, haga doble clic en el icono ODBC.

Nota   Cuando utilice controladores de 16 bits en Microsoft Windows NT, en la ventana del Administrador de programas abra el grupo Microsoft ODBC y haga doble clic en el icono Administrador de Microsoft ODBC.

2.	Aparece el cuadro de diálogo Orígenes de datos. Elija el botón "Agregar".

Aparece el cuadro de diálogo Agregar origen de datos.

3.	En la lista "Controladores ODBC instalados", seleccione SQL Server y a continuación elija "Aceptar".

Aparece el cuadro de diálogo Instalación de SQL Server de ODBC.

El cuadro de diálogo Instalación de SQL Server de ODBC tiene las siguientes opciones.

Nombre del origen de datos

El nombre del origen de datos deseado. Por ejemplo, "Datos de personal".

Descripción

Una descripción de los datos del origen de datos. Por ejemplo, "Fecha de contratación, historial de sueldo y revisión actual de todos los empleados".

Servidor

El nombre de un SQL Server de la red. Puede seleccionar un servidor de la lista o introducir el nombre del servidor.

Puede indicar "(local)" como servidor en un PC Microsoft Windows NT. A continuación, el usuario podrá utilizar una copia local de un SQL Server (que escucha en canalizaciones con nombre), incluso al ejecutar una versión no integrada en red de SQL Server. Observe que cuando el controlador SQL Server de 16 bits utiliza "(local)" sin red, es necesario instalar el Adaptador MS Loopback.

Para obtener más información sobre los nombres de servidor para distintos tipos de redes, consulte Instalación de Microsoft SQL Server.

Dirección de red

La dirección del sistema de administración de bases de datos (DBMS) SQL Server desde el cual el controlador recupera los datos. Para Microsoft SQL Server normalmente puede dejar este valor establecido como (Predeterminado).

Biblioteca de red

El nombre de la DLL Biblioteca de red SQL Server que el controlador SQL Server utiliza para comunicarse con el software de red. Si el valor de esta opción es (Predeterminado) el controlador SQL Server utiliza la Biblioteca de red predeterminada del PC cliente, que se especifica en el cuadro "Red predeterminada" de la ficha "Biblioteca de red" de la Utilidad de configuración de cliente de SQL Server.

Si crea un origen de datos utilizando una Biblioteca de red distinta de (Predeterminada) y, opcionalmente, una Dirección de red, Instalación de SQL Server de ODBC creará una entrada para el nombre del servidor que puede ver en la ficha "Avanzadas" de la Utilidad de configuración de cliente SQL Server. Estas entradas de nombre de servidor también pueden ser utilizadas por las aplicaciones Biblioteca-BD.

Opciones

Para acceder a los siguientes campos, haga clic en el botón "Opciones".

Nombre de base de dados

El nombre de la base de datos SQL Server.

Nombre del idioma

El idioma nacional utilizado por SQL Server.

Generar procedimientos almacenados para instrucciones preparadas

Cuando esta opción está seleccionada (el valor predeterminado), se crean procedimientos almacenados para instrucciones preparadas. El controlador SQL Server prepara una instrucción colocándola en un procedimiento y compilando dicho procedimiento.

Cuando la casilla de verificación de esta opción está desactivada, la creación de procedimientos almacenados para instrucciones preparadas está desactivada. En este caso, las instrucciones preparadas se almacenan y se ejecuta en tiempo de ejecución.

Conversión

La descripción del conversor actual. Para seleccionar otro conversor distinto, elija el botón "Seleccionar" y selecciónelo en la lista del cuadro de diálogo Seleccionar conversor.

Conversión de caracteres OEM a ANSI

Si el PC cliente de SQL Server y SQL Server utilizan el mismo conjunto de caracteres distinto de ANSI, seleccione esta opción. Por ejemplo, si SQL Server utiliza la tabla de códigos 850 y este PC cliente emplea la tabla de códigos 850 como tabla de códigos OEM, al seleccionar esta opción se garantiza que los caracteres extendidos almacenados en la base de datos se convierten adecuadamente a ANSI para que los utilicen las aplicaciones basadas en Windows.

Cuando la casilla de verificación de esta opción está desactivada y el equipo cliente de SQL Server y el servidor SQL Server utilizan distintos conjuntos de caracteres, debe especificar un conversor de conjunto de caracteres.

Vea también

Opciones de conexión específicas del controlador

Uso de SQLConfigDataSource para cambiar orígenes de datos


Uso de SQLConfigDataSource para cambiar orígenes de datos

Puede llamar a la función API SQLConfigDataSource para agregar, modificar o eliminar dinámicamente un origen de datos. Esta función utiliza palabras clave para establecer opciones de conexión que normalmente se establecen a través del cuadro de diálogo Instalación de SQL Server de ODBC. Utilice esta función cuando desee agregar, modificar o eliminar un origen de datos sin mostrar el cuadro de diálogo Instalación de SQL Server de ODBC.


Eliminación de un origen de datos

Para eliminar un origen de datos, en la lista "Orígenes de datos" del cuadro de diálogo Orígenes de datos, seleccione el que desea eliminar. Elija el botón "Eliminar", y a continuación elija el botón "Sí" para confirmar la eliminación.

Puede que el sistema le pregunte si desea eliminar el nombre del origen de datos y la información asociada a él del archivo WIN.INI o del registro. Otras aplicaciones que llaman a SQL Server pueden emplear esta información para conectarse a los orígenes de datos de SQL Server.

Elija el botón "Sí" si está seguro de que ninguna otra aplicación utiliza la información acerca de este origen de datos; si no está seguro, elija el botón "No".


Valores devueltos por SQLGetInfo

La siguiente tabla enumera las instrucciones #define del lenguaje C para el argumento fInfoType y los valores correspondientes devueltos por SQLGetInfo al conectarse a SQL Server 6.0. Una aplicación recupera esta información transfiriendo las instrucciones #define del lenguaje C enumeradas a SQLGetInfo en el argumento fInfoType.

Argumento fInfoType (#define)	Valor devuelto por SQLGetInfo
SQL_ACCESSIBLE_PROCEDURES	Y
SQL_ACCESSIBLE_TABLES	Y
SQL_ACTIVE_CONNECTIONS	0 (El número de conexiones activas está determinado por el número de conexiones de red disponibles en la computadora cliente y por el número de conexiones permitidas por el DBMS del servidor).
SQL_ACTIVE_STATEMENTS	1 (Aunque este valor es 1, el controlador admite múltiples instrucciones activas en una conexión si se utilizan cursores de servidor. Consulte Uso de cursores ODBC).
SQL_ALTER_TABLE	SQL_AT_ADD_COLUMN
SQL_BOOKMARK_PERSISTENCE	0
SQL_COLUMN_ALIAS	Y
SQL_CONCAT_NULL_BEHAVIOR	SQL_CB_NON_NULL
SQL_CONVERT_FUNCTIONS	SQL_FN_CVT_CONVERT
SQL_CONVERT_tipo donde tipo es el tipo de datos SQL, como CHAR	Consulte el tema Asignación de tipos de datos.
SQL_CORRELATION_NAME	SQL_CN_ANY
SQL_CURSOR_COMMIT_BEHAVIOR	SQL_CB_CLOSE (Es el comportamiento especificado por ANSI. Puesto que reconoce la necesidad que tienen muchas aplicaciones de conservar la actualidad del cursor del servidor en diferentes realizaciones/retrocesos, el controlador proporciona una opción específica del controlador, SQL_PRESERVE_CURSORS, para anular el valor predeterminado de ANSI).
SQL_CURSOR_ROLLBACK_ BEHAVIOR	SQL_CB_CLOSE (Es el comportamiento especificado por ANSI. Puesto que reconoce la necesidad que tienen muchas aplicaciones de conservar la actualidad del cursor del servidor en diferentes realizaciones/retrocesos, el controlador proporciona una opción específica del controlador, SQL_PRESERVE_CURSORS, para anular el valor predeterminado de ANSI).
SQL_DBMS_NAME	Microsoft SQL Server
SQL_DEFAULT_TXN_ISOLATION	SQL_TXN_READ_COMMITTED.
SQL_DRIVER_NAME	SQLSRVR.DLL (16 bits) SQLSRV32.DLL (32 bits)
SQL_DRIVER_ODBC_VER	02.50
SQL_DRIVER_VER	02.50.nnnn (donde nnnn especifica el número de versión)
SQL_EXPRESSIONS_IN_ORDERBY	Y
SQL_FETCH_DIRECTION	SQL_FD_FETCH_NEXT SQL_FD_FETCH_FIRST SQL_FD_FETCH_LAST SQL_FD_FETCH_PRIOR SQL_FD_FETCH_ABSOLUTE SQL_FD_FETCH_RELATIVE
SQL_FILE_USAGE	SQL_FILE_NOT_SUPPORTED
SQL_GETDATA_EXTENSIONS	SQL_GD_BLOCK
SQL_GROUP_BY	SQL_GB_GROUP_BY_CONTAINS_SELECT
SQL_IDENTIFIER_CASE	(Depende de si SQL Server se instaló para distinguir o no entre mayúsculas y minúsculas).
SQL_IDENTIFIER_QUOTE_CHAR	" (Comillas dobles)
SQL_KEYWORDS	BREAK BROWSE BULK CHECKPOINT CLUSTERED COMMITTED COMPUTE CONFIRM CONTROLROW DATABASE DBCC DISK DUMMY DUMP ERRLVL ERROREXIT EXIT EXPIREDATE FILE FILLFACTOR FLOPPY GETDEFAULT HOLDLOCK IDENTITY_INSERT IDENTITYCOL IF KILL LINENO LOAD MIRROREXIT NONCLUSTERED OFF OFFSETS ONCE OVER PERM PERMANENT PLAN PRINT PROC PROCESSEXIT PUBLIC RAISERROR READ READTEXT RECONFIGURE REPEATABLE RETAINDATE RETURN ROWCOUNT RULE SAVE SERIALIZABLE SETUSER SHUTDOWN STATISTICS TAPE TEMP TEXTSIZE TRAN TRIGGER TRUNCATE TSEQUEL UNCOMMITTED UPDATETEXT USE VOLUME WAITFOR WHILE WRITETEXT
SQL_LIKE_ESCAPE_CLAUSE	N
SQL_LOCK_TYPES	SQL_LCK_NO_CHANGE
SQL_MAX_BINARY_LITERAL_LEN	131072
SQL_MAX_CHAR_LITERAL_LEN	131072
SQL_MAX_COLUMN_NAME_LEN	30
SQL_MAX_COLUMNS_IN_GROUP_ BY	16
SQL_MAX_COLUMNS_IN_INDEX	16
SQL_MAX_COLUMNS_IN_ORDER_ BY	16
SQL_MAX_COLUMNS_IN_SELECT	4000
SQL_MAX_COLUMNS_IN_TABLE	250
SQL_MAX_CURSOR_NAME_LEN	30
SQL_MAX_INDEX_SIZE	256
SQL_MAX_OWNER_NAME_LEN	30
SQL_MAX_PROCEDURE_NAME_LEN	36 (1 a 30 caracteres seguidos de un punto y coma [;] y entre uno y cinco dígitos)
SQL_MAX_QUALIFIER_NAME_LEN	30
SQL_MAX_ROW_SIZE	1962
SQL_MAX_ROW_SIZE_INCLUDES_    LONG	N
SQL_MAX_STATEMENT_LEN	131072
SQL_MAX_TABLE_NAME_LEN	30
SQL_MAX_TABLES_IN_SELECT	16
SQL_MAX_USER_NAME_LEN	30
SQL_MULT_RESULT_SETS	Y
SQL_MULTIPLE_ACTIVE_TXN	Y
SQL_NEED_LONG_DATA_LEN	Y
SQL_NON_NULLABLE_COLUMNS	SQL_NNC_NON_NULL
SQL_NULL_COLLATION	SQL_NC_LOW
SQL_NUMERIC_FUNCTIONS	SQL_FN_NUM_ABS SQL_FN_NUM_ACOS SQL_FN_NUM_ASIN SQL_FN_NUM_ATAN SQL_FN_NUM_ATAN2 SQL_FN_NUM_CEILING SQL_FN_NUM_COS SQL_FN_NUM_COT SQL_FN_NUM_DEGREES SQL_FN_NUM_EXP SQL_FN_NUM_FLOOR SQL_FN_NUM_LOG SQL_FN_NUM_LOG10 SQL_FN_NUM_MOD SQL_FN_NUM_PI SQL_FN_NUM_POWER SQL_FN_NUM_RADIANS SQL_FN_NUM_RAND SQL_FN_NUM_ROUND SQL_FN_NUM_SIGN SQL_FN_NUM_SIN SQL_FN_NUM_SQRT SQL_FN_NUM_TAN
SQL_ODBC_API_CONFORMANCE	SQL_OAC_LEVEL2
SQL_ODBC_SAG_CLI_ CONFORMANCE	SQL_OSCC_NOT_COMPLIANT
SQL_ODBC_SQL_CONFORMANCE	SQL_OSC_CORE
SQL_ODBC_SQL_OPT_IEF	Y
SQL_ORDER_BY_COLUMNS_IN_ SELECT_SQL_OJ_CAPABILITIES	N SQL_OJ_LEFT SQL_OJ_RIGHT SQL_OJ_NESTED
SQL_OUTER_JOINS	Y
SQL_OWNER_TERM	propietario
SQL_OWNER_USAGE	SQL_OU_DML_STATEMENTS SQL_OU_PROCEDURE_     INVOCATION SQL_OU_TABLE_DEFINITION SQL_OU_INDEX_DEFINITION SQL_OU_PRIVILEGE_     DEFINITION
SQL_POS_OPERATIONS	SQL_POS_ADD SQL_POS_DELETE SQL_POS_POSITION SQL_POS_REFRESH SQL_POS_UPDATE
SQL_POSITIONED_STATEMENTS	SQL_PS_POSITIONED_DELETE SQL_PS_POSITIONED_UPDATE SQL_PS_SELECT_FOR_     UPDATE
SQL_PROCEDURE_TERM	procedimiento almacenado
SQL_PROCEDURES	Y
SQL_QUALIFIER_LOCATION	SQL_QL_START
SQL_QUALIFIER_NAME_ SEPARATOR	. (punto)
SQL_QUALIFIER_TERM	base de datos
SQL_QUALIFIER_USAGE	SQL_QU_DML_STATEMENTS, SQL_QU_PROCEDURE_    INVOCATION, SQL_QU_TABLE_DEFINITION
SQL_QUOTED_IDENTIFIER_CASE	(Depende de si SQL Server se instaló para distinguir entre mayúsculas y minúsculas o no).
SQL_ROW_UPDATES	N
SQL_SCROLL_CONCURRENCY	SQL_SCCO_LOCK SQL_SCCO_OPT_ROWVER SQL_SCCO_OPT_VALUES SQL_SCCO_READ_ONLY
SQL_SCROLL_OPTIONS	SQL_SO_DYNAMIC SQL_SO_FORWARD_ONLY SQL_SO_KEYSET_DRIVEN SQL_SO_STATIC
SQL_SEARCH_PATTERN_ESCAPE	"\" (barra inversa)
SQL_SPECIAL_CHARACTERS	#$ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
SQL_STATIC_SENSITIVITY	SQL_SS_ADDITIONS SQL_SS_UPDATES
SQL_STRING_FUNCTIONS	SQL_FN_STR_ASCII, SQL_FN_STR_CHAR, SQL_FN_STR_CONCAT, SQL_FN_STR_DIFFERENCE, SQL_FN_STR_INSERT, SQL_FN_STR_LCASE, SQL_FN_STR_LEFT, SQL_FN_STR_LENGTH, SQL_FN_STR_LOCATE_2, SQL_FN_STR_LTRIM, SQL_FN_STR_REPEAT, SQL_FN_STR_RIGHT, SQL_FN_STR_RTRIM, SQL_FN_STR_SOUNDEX, SQL_FN_STR_SPACE, SQL_FN_STR_SUBSTRING, SQL_FN_STR_UCASE
SQL_SUBQUERIES	SQL_SQ_COMPARISON, SQL_SQ_EXISTS, SQL_SQ_IN, SQL_SQ_QUANTIFIED, SQL_SQ_CORRELATED_    SUBQUERIES
SQL_SYSTEM_FUNCTIONS	SQL_FN_SYS_DBNAME, SQL_FN_SYS_IFNULL, SQL_FN_SYS_USERNAME,
SQL_TABLE_TERM	tabla
SQL_TIMEDATE_ADD_INTERVALS	SQL_FN_TSI_FRAC_SECOND, SQL_FN_TSI_SECOND, SQL_FN_TSI_MINUTE, SQL_FN_TSI_HOUR, SQL_FN_TSI_DAY, SQL_FN_TSI_WEEK, SQL_FN_TSI_MONTH, SQL_FN_TSI_QUARTER, SQL_FN_TSI_YEAR
SQL_TIMEDATE_DIFF_INTERVALS	SQL_FN_TSI_FRAC_SECOND, SQL_FN_TSI_SECOND, SQL_FN_TSI_MINUTE, SQL_FN_TSI_HOUR, SQL_FN_TSI_DAY, SQL_FN_TSI_WEEK, SQL_FN_TSI_MONTH, SQL_FN_TSI_QUARTER, SQL_FN_TSI_YEAR,
SQL_TIMEDATE_FUNCTIONS	SQL_FN_TD_NOW, SQL_FN_TD_CURDATE, SQL_FN_TD_DAYOFMONTH, SQL_FN_TD_DAYOFWEEK, SQL_FN_TD_DAYOFYEAR, SQL_FN_TD_DAYNAME, SQL_FN_TD_MONTH, SQL_FN_TD_MONTHNAME, SQL_FN_TD_QUARTER, SQL_FN_TD_WEEK, SQL_FN_TD_YEAR, SQL_FN_TD_CURTIME, SQL_FN_TD_HOUR, SQL_FN_TD_MINUTE, SQL_FN_TD_SECOND, SQL_FN_TD_TIMESTAMPADD, SQL_FN_TD_TIMESTAMPDIFF
SQL_TXN_CAPABLE	SQL_TC_DML
SQL_TXN_ISOLATION_OPTION	SQL_TXN_READ_COMMITTED SQL_TXN_READ_     UNCOMMITTED SQL_TXN_REPEATABLE_READ SQL_TXN_SERIALIZABLE
SQL_UNION	SQL_U_UNION, SQL_U_UNION_ALL


Conexión a un origen de datos de SQL Server

Cuando una aplicación se conecta a SQL Server, utilizando SQLDriverConnect, la aplicación puede generar una solicitud de información sobre el origen de datos. Esta solicitud puede estar en forma de consulta de Origen de datos, o bien mediante un cuadro de diálogo. Para una consulta de Origen de datos, introduzca el nombre del origen de datos. Para un cuadro de diálogo, cumplimente el cuadro de diálogo de la siguiente forma:

1.	Introduzca o seleccione el nombre del servidor.

2.	En el campo de texto "ID de inicio de sesión", escriba el ID de inicio de sesión de su SQL Server.

3.	En el campo de texto "Contraseña", escriba la contraseña de su SQL Server.

4.	Elija "Aceptar".

Si desea información sobre el modo de seguridad de inicio de sesión de SQL Server, y sobre conexiones seguras, consulte el Microsoft SQL Server Administrator's Companion.

Para introducir información opcional de conexión, como la base de datos a la que acceder y el idioma que debe utilizar SQL Server, elija el botón "Opciones".

1.	En el cuadro de lista "Base de datos", seleccione la base de datos a la que desea acceder*.

Al abrir el cuadro de lista, se selecciona la base de datos predeterminada del usuario.

2.	En el cuadro "Lenguaje", seleccione el idioma que debe utilizar el SQL Server*.

Al abrir el cuadro de lista, se selecciona el idioma predeterminado del usuario.

3.	Si el nombre de aplicación mostrado es incorrecto, introduzca el nombre adecuado para la aplicación.

Se trata del nombre de la aplicación que está llamando al controlador SQL Server.

4.	Si el ID de estación de trabajo mostrado es incorrecto, introduzca el ID de estación de trabajo adecuado.

Normalmente, suele ser el nombre de red del PC donde reside la aplicación.

5.	Elija "Aceptar".

* Establecer la base de datos y el lenguaje predeterminados para el ID de inicio de sesión en SQL Server es más eficaz que especificarlos como opciones DSN.

Uso de ODBCPING.EXE para verificar una conexión

Puede emplear la utilidad ODBCPING.EXE para comprobar si ODBC está bien instalado conectándose a un servidor que utiliza el controlador SQL Server de ODBC. Esta utilidad es una aplicación de 32 bits almacenada en el directorio \SQL60\BINN. Para verificar la conectividad de ODBC, escriba en la línea de comandos:

odbcping /Snombreservidor /Uid_inicio /Pcontraseña

donde

nombreservidor

es el nombre del servidor al que se va a conectar.

id_inicio

es un ID de inicio de sesión válido para el servidor.

contraseña

es la contraseña para el ID de inicio de sesión.

Si se establece la conexión ODBC, aparece este mensaje:

CONECTADO A SQL SERVER

Si no se puede establecer la conexión ODBC, aparece este mensaje:

NO SE HA PODIDO CONECTAR A SQL SERVER

Vea también

Instalación de SQL Server de ODBC

SQLBrowseConnect

SQLConnect

SQLDriverConnect


origen de datos (SQL Server)

Un origen de datos incluye los datos a los que un usuario desea acceder y la información necesaria para acceder a dichos datos. Para el controlador SQL Server, un origen de datos es una base de datos de Microsoft SQL Server, el servidor donde reside y la red utilizada para acceder a dicho servidor.


Opciones de conexión específicas del controlador

El controlador SQL Server admite las siguientes opciones de conexión específicas del controlador en SQLSetConnectOption y SQLGetConnectOption.

Opción	Descripción
SQL_INTEGRATED_SECURITY	SQL_IS_OFF. Solicita una conexión normal a SQL Server. No se solicita una conexión de confianza utilizando la seguridad integrada de SQL Server. (Predeterminado) SQL_IS_ON. Solicita una conexión de confianza con SQL Server sin importar el modo de seguridad del servidor. Para obtener información sobre el modo de seguridad de inicio de sesión de SQL Server y las conexiones de confianza, consulte Microsoft SQL Server Administrator's Companion.
SQL_USE_PROCEDURE _FOR_PREPARE	SQL_UP_ON. Se generan procedimientos almacenados temporalmente para SQLPrepare. (Predeterminado) SQL_UP_OFF. No se generan procedimientos almacenados temporalmente para SQLPrepare. La instrucción se almacena, se compila y se ejecuta en tiempo de ejecución. Toda comprobación de errores de sintaxis se pospone hasta el tiempo de ejecución. SQL_UP_ON_DROP. Los procedimientos almacenados temporalmente se eliminan explícitamente en una llamada posterior a SQLPrepare o cuando se libera un hstmt.
SQL_PRESERVE_CURSORS	SQL_PC_OFF. Todos los cursores se cierran en SQLTransact. (Predeterminado) SQL_PC_ON. Los cursores de servidor permanecen abiertos en SQLTransact.
Sentencias #define de opción específicas del controlador

A continuación se indican sentencias #define específicas de SQL Server.

// //	Las sentencias #define específicas del controlador SQLSetConnectOption/SQLSetStmtOption números 1200 a 1249 son reservadas.
//	Opciones de conexión
#define	SQL_USE_PROCEDURE_FOR_PREPARE	1202
#define	SQL_INTEGRATED_SECURITY *	1203
#define	SQL_PRESERVE_CURSORS	1204
//	Opciones de instrucción
#define	SQL_TEXTPTR_LOGGING	1225
//	Defines SQL_USE_PROCEDURE_FOR_PREPARE
#define	SQL_UP_OFF	0L
#define	SQL_UP_ON	1L
#define	SQL_UP_ON_DROP	2L
#define	SQL_UP_DEFAULT	SQL_UP_ON
//	Defines SQL_INTEGRATED_SECURITY
#define	SQL_IS_OFF	0L
#define	SQL_IS_ON	1L
#define	SQL_IS_DEFAULT	SQL_IS_OFF
//	Defines SQL_PRESERVE_CURSORS
#define	SQL_PC_OFF	0L
#define	SQL_PC_ON	1L
#define	SQL_PC_DEFAULT	SQL_PC_OFF
//	Defines SQL_TEXTPTR_LOGGING
#define	SQL_TL_OFF	0L
#define	SQL_TL_ON	1L
#define	SQL_TL_DEFAULT	SQL_TL_ON
*	Solamente son utilizables antes de la conexión.


Asignación de tipos de datos

El controlador SQL Server asigna tipos de datos SQL de SQL Server a tipos de datos SQL de ODBC. La siguiente tabla enumera todos los tipos de datos SQL de SQL Server y muestra los tipos de datos SQL de ODBC a los que se asignan.

Tipos de datos SQL Server	Tipos de datos SQL de ODBC
binary	SQL_BINARY
bit	SQL_BIT
char, character	SQL_CHAR
datetime	SQL_TIMESTAMP
decimal, dec (SQL Server 6.0)	SQL_DECIMAL
float, double precision, float(n) para n = 8-15	SQL_FLOAT
image	SQL_LONGVARBINARY
int, integer	SQL_INTEGER
money	SQL_DECIMAL
numeric (SQL Server 6.0)	SQL_NUMERIC
real, float(n) para n = 1-7	SQL_REAL
smalldatetime	SQL_TIMESTAMP
smallint	SQL_SMALLINT
smallmoney	SQL_DECIMAL
sysname	SQL_VARCHAR
text	SQL_LONGVARCHAR
timestamp*	SQL_BINARY (SQL Server 6.0) SQL_VARBINARY (SQL Server 4.2x)
tinyint	SQL_TINYINT
varbinary, binary varying	SQL_VARBINARY
varchar, character varying, char varying	SQL_VARCHAR
*	El tipo de datos timestamp se convierte al tipo de datos SQL_VARBINARY o a SQL_BINARY porque los valores de las columnas timestamp no son datos datetime, sino datos varbinary(8) o binary(8), indicando la secuencia de la actividad de SQL Server en la fila.

Nota  El controlador SQL Server no convierte los datos SQL de los tipos SQL_CHAR, SQL_VARCHAR o SQL_LONGVARCHAR a datos C de los tipos SQL_C_DATE o SQL_C_TIME. Todas las demás conversiones son válidas para los tipos de datos SQL de ODBC enumerados en este tema. Si desea información sobre las conversiones compatibles, consulte el Apéndice D de Microsoft ODBC SDK Programmer's Reference.


Uso de tipos de datos

El controlador SQL Server y SQL Server imponen el siguiente uso de tipos de datos.

Tipo de datos	Limitaciones
Literales de fecha	Los literales de fecha, cuando se almacenan en una columna SQL_TIMESTAMP (tipos SQL Server datetime o smalldatetime), tienen un valor de hora de 12:00:00.000 A.M. (media noche).
money y smallmoney	Solamente son significativas las partes de entero de los tipos de datos money y smallmoney. Si la parte decimal de los datos money de SQL se trunca durante la conversión de tipos de datos, el controlador SQL Server devuelve una advertencia, no un error.
SQL_BINARY	Si una columna SQL_BINARY se puede establecer como nula, los datos almacenados en el origen de datos no se rellenan con ceros. Cuando se recuperan datos de una columna de este tipo, el controlador SQL Server la rellena con ceros a la derecha. No obstante, los datos creados en operaciones ejecutadas por el SQL Server, como la concatenación, no disponen de este relleno.
SQL_CHAR (truncamiento)	Cuando se incluyen datos en una columna SQL_CHAR, SQL Server los trunca a la derecha sin advertencia en caso de que su longitud sea excesiva y no quepan en la columna.
SQL_CHAR (con admisión de nulo)	Si una columna SQL_CHAR admite valores nulos, los datos almacenados en el origen de datos no se rellenan con espacios en blanco. Cuando se recuperan los datos de una columna de este tipo, el controlador SQL Server los rellena con espacios en blanco a la derecha. No obstante, los datos creados en operaciones ejecutadas por SQL Server, como la concatenación, no disponen de este relleno.
SQL_LONGVAR BINARY, SQL_LONGVAR CHAR	Las actualizaciones de columnas con tipos de datos SQL_LONGVARBINARY o SQL_LONGVARCHAR (utilizando una cláusula WHERE) que afecta a múltiples filas son plenamente compatibles al conectarse con SQL Server 6.0. Cuando se conecta con SQL Server versión 4.2x, devuelve un error S1000 "Inserción/actualización parcial. La inserción/actualización de columnas de texto o imagen no se realizó satisfactoriamente" en caso de que la actualización implique a dos o más filas.
Parámetros de función de cadena	Los parámetros exp_cadena de las funciones de cadena deben ser del tipo SQL_CHAR o SQL_VARCHAR. Los tipos SQL_LONG_VARCHAR no se admiten en las funciones de cadena. El parámetro cuenta debe ser menor o igual que 255, puesto que los tipos de datos SQL_CHAR y SQL_VARCHAR están limitados a una longitud máxima de 255 caracteres.
Literales de hora	Los literales de hora, cuando se almacenan en una columna SQL_TIMESTAMP (tipos SQL Server de datetime o smalldatetime), tienen un valor de fecha de 1 de enero de 1900.
timestamp	En una columna timestamp solamente se puede insertar manualmente un valor Null. No obstante, puesto que SQL Server actualiza automáticamente las columnas timestamp, los valores Null se sobrescriben.
tinyint	El tipo de datos tinyint de SQL Server no tiene signo. Una columna tinyint está vinculada, de manera predeterminada, a una variable de tipo SQL_C_UTINYINT.
Tipos de datos definidos por el usuario	Cuando se conecta a SQL Server versión 4.2x, el controlador SQL Server añade NULL a una definición de columna que no declara explícitamente la posibilidad de una columna para aceptar valores nulos. Por lo tanto, la capacidad de nulo almacenada en la definición de un tipo de datos definido por el usuario se ignora. Cuando se conecta a SQL Server versión 4.2x, las columnas con un tipo de datos definido por el usuario que tengan un tipo base de char / binary y para las cuales no se haya declarado la capacidad de nulo se crean como tipo varchar / varbinary. SQLColAttributes, SQLColumns y SQLDescribeCol devuelven SQL_VARCHAR / SQL_VARBINARY como tipo de datos para estas columnas. Los datos recuperados de estas columnas no se rellenan.
Tipos de datos LONG	Los datos SQL_LONGVARBINARY se deben transferir a SQLPutData como datos binary simples, no como datos binary convertidos a datos character. Además, los parámetros de datos en la ejecución están limitados para los tipos de datos tanto SQL_LONGVARBINARY como SQL_LONGVARCHAR. Si desea más detalles, consulte el tema Limitaciones de parámetros de datos en la ejecución.


Resolución de nulidad

En la gramática de ODBC, se supone que las columnas cuya capacidad de nulo no esté especificada admiten el valor nulo. En la gramática de SQL Server, se considera que las columnas cuya capacidad de nulo no esté especificada no admiten el valor nulo.

Cuando se conecta a SQL Server 6.0, el controlador SQL Server resuelve esta situación utilizando la instrucción SET ANSI_NULL_DEFAULT_ON ON SQL. Esto hace que el servidor utilice un valor predeterminado de NULL para las columnas cuya capacidad de nulo no esté especificada, exceptuando las columnas bit o los tipos de datos definidos por el usuario.

Cuando se conecta a SQL Server versión 4.2x, el controlador SQL Server agrega una especificación Null a cada definición de columna en una instrucción CREATE TABLE que no especifica si la columna acepta valores null (excepto a las columnas BIT, que no los aceptan). También agrega una especificación NULL a cada definición de columna de una instrucción ALTER TABLE (excepto a las columnas BIT, que no aceptan los valores null).


Uso de cursores de ODBC

SQL Server 6.0 proporciona soporte para cursores basados en motor y la versión 2.5 del controlador SQL Server se ha mejorado para obtener un mejor uso de esta potente característica. Esta sección ofrece una breve introducción general sobre el uso de los cursores del servidor en la API ODBC.

Modelo de cursor ODBC

ODBC admite un modelo de cursor que permite varios tipos de cursores, desplazamiento dentro de un cursor, diversas opciones de concurrencia y recopilaciones de una sola fila así como de grandes cantidades. A diferencia de SQL ANSI, ODBC no dispone de API explícitas para Declara, Abrir y Cerrar cursores. Los cursores se crean automáticamente al emitir una instrucción SQLExecDirect o SQLPrepare + SQLExecute basada en las opciones de instrucción especificadas.

Instrucciones de Tipo A y Tipo B

El controlador SQL Server utiliza dos tipos de instrucciones  Tipo A y Tipo B.

Una instrucción de Tipo A se define como cualquier instrucción que utilice los valores predeterminados en cada una de las tres opciones de instrucción indicadas a continuación:

Opción	Valor predeterminado
SQL_CONCURRENCY	SQL_CONCUR_READ_ONLY
SQL_CURSOR_TYPE	SQL_CURSOR_FORWARD_ONLY
SQL_ROWSET_SIZE	1
Las instrucciones de Tipo A no utilizan los cursores del servidor. En lugar de esto, la consulta se ejecuta en el servidor y los conjuntos de resultados se vuelven a transferir a la aplicación. El controlador SQL Server le permite ejecutar SQLFetch y SQLExtendedFetch (puede cambiar el tamaño del conjunto de filas después de abrir el cursor y realizar búsquedas de grupo) en estos datos, pero la conexión entre el cliente y el servidor permanece ocupada hasta que se recopilen todos los datos (hasta alcanzar el final del cursor) o hasta que el cursor se cierre. Esta opción es rápida si va a recuperar todas las filas secuencialmente y no necesita ejecutar ninguna actualización. Puesto que no se utilizan cursores del servidor, no puede efectuar operaciones posicionadas (utilizando WHERE CURRENT OF) en las instrucciones de Tipo A.

Una instrucción de Tipo B se define como cualquier instrucción que no utilice el valor predeterminado en las tres opciones de instrucción indicadas anteriormente. Las instrucciones de Tipo B hacen que el controlador utilice cursores de servidor en la mayoría de los casos (consulte las limitaciones bajo "Creación de cursores").


Ventajas del uso de cursores del servidor

El uso de cursores basados en el servidor implementados en SQL Server 6.0 proporciona diversas ventajas.

•	Rendimiento: si va a acceder a una pequeña cantidad de los datos del cursor (habitual en muchas aplicaciones de examen), el uso de cursores basados en el servidor le proporcionará un enorme aumento del rendimiento, puesto que solamente se envían a través de la red los datos necesarios (y no todo el conjunto de resultados).

•	Tipos adicionales de cursor: los tipos de cursor dinámico y de conjunto de teclas solamente están disponibles si utiliza cursores basados en el servidor. Además, la biblioteca de cursores únicamente admite sólo envío con la concurrencia de sólo lectura, y estático con la concurrencia optimista y de sólo lectura. Con cursores basados en servidor, puede utilizar toda la gama de valores de concurrencia con los distintos tipos de cursor.

•	Semántica más clara: la biblioteca de cursores simula actualizaciones de cursor generando una instrucción de actualización buscada por SQL. Esto puede dar lugar, a veces, a actualizaciones no deseadas.

•	Uso de memoria: cuando utilice cursores basados en el servidor, el cliente no necesita incluir en caché grandes cantidades de datos ni mantener información sobre la posición del cursor; es el servidor quien proporciona esta funcionalidad.

•	Múltiples cursores abiertos: al utilizar cursores basados en el servidor, la conexión entre el cliente y el servidor no permanece ocupada entre operaciones del cursor. Esto le permite disponer de múltiples hstmts de cursores activos al mismo tiempo. En cuanto a la especificación ODBC, continúa estando limitado a un cursor por hstmt. Para anular la limitación de un hstmt activo asociada con instrucciones de Tipo A, cambie las opciones de instrucción para asociar los cursores del servidor con instrucciones de Tipo B.

Vea también

Creación de cursores

Recuperación de datos de cursores

Actualización de cursores

Cierre de cursores


Creación de cursores

En lo que respecta a los cursores ODBC, la definición de cursor es básicamente transferir la instrucción SQL como argumento a SQLExecuteDirect o SQLPrepare/SQLExecute. Al crear cursores a través del controlador SQL Server se aplican las siguientes reglas.

•	Solamente se crean cursores de servidor para instrucciones que comienzan con una cláusula SELECT, EXEC[ute] nombre_procedimiento o {call nombre_procedimiento}. En los demás casos, se consideran instrucciones de Tipo A. No se crean cursores de servidor para un lote SQL. Reciben el mismo tratamiento que las instrucciones de Tipo A.

•	Si solicita un cursor Dinámico o de Conjunto de teclas y no existe un índice único para cada tabla a la que se hace referencia en la definición del cursor, el servidor crea un cursor estático y el controlador devuelve un estado SQL_SUCCESS_WITH_INFO.

•	SQL Server le permite crear cursores en tablas base así como en presentaciones. Además, los cursores se pueden abrir en una consulta que implique combinaciones entre múltiples tablas u operadores de agregado. Sin embargo, no se permite utilizar las palabras clave COMPUTE, COMPUTE BY, FOR BROWSE e INTO en la definición del cursor.

•	Si la definición del cursor implica una cláusula UNION, UNION ALL, combinación externa, GROUP BY con o sin HAVING o DISTINCT, siempre se crea un cursor Estático, sin importar lo que se solicitó, y el controlador devuelve un estado SQL_SUCCESS_WITH_INFO.

•	Si solicita un cursor Dinámico y la definición del cursor contiene una cláusula ORDER BY que no coincide con un índice único o una subconsulta, el servidor crea un cursor de tipo Conjunto de teclas y el controlador devuelve un estado SQL_SUCCESS_WITH_INFO.

•	Si solicita una concurrencia de versiones de fila y no dispone de una columna TIMESTAMP para cada tabla de la definición del cursor, el servidor utiliza una concurrencia basada en los valores y el controlador devuelve un estado SQL_SUCCESS_WITH_INFO.

•	Solamente obtendrá un cursor en SQLExecDirect (Exec nombre_procedimiento o {Call nombre_procedimiento}) si el procedimiento contiene una instrucción SELECT y nada más. De lo contrario, SQL Server genera un mensaje de error. Debido a esta limitación, no puede utilizar cursores de servidor con las funciones de catálogo de ODBC (que emplean procedimientos almacenados con múltiples instrucciones SELECT).

•	Obtendrá automáticamente el comportamiento del cursor asociado con instrucciones de Tipo A al ejecutar un lote que contenga múltiples instrucciones SELECT (excepto si la primera instrucción es SELECT, EXECUTE o una invocación de procedimiento canónico ODBC, en cuyo caso el controlador SQL Server genera un mensaje de error).

Los cursores Conjunto de teclas también se pueden realizar de manera asíncrona (consulte la documentación del servidor SQL Server en sp_configure). La realización asíncrona del conjunto de teclas no influye en ninguna de las API ODBC relacionadas con el cursor, con la excepción de SQLRowCount.

Los siguientes temas explican funciones ODBC importantes para la creación de cursores.

SQLSetStmtOption

SQLSetScrollOptions

SQLSetConnectOption

SQLSetCursorName

SQLGetCursorName

SQLGetStmtOption

SQLGetInfo


SQLSetStmtOption

La función SQLSetStmtOption permite a la persona que llama establecer diversas opciones a nivel de instrucción. Admite las siguientes opciones relacionadas con el cursor.

Opción	Valor
SQL_CONCURRENCY	SQL_CONCUR_READ_ONLY SQL_CONCUR_LOCKING SQL_CONCUR_ROWVER SQL_CONCUR_VALUES
SQL_CURSOR_TYPE	SQL_CURSOR_FORWARD_ONLY SQL_CURSOR_STATIC SQL_CURSOR_KEYSET_DRIVEN SQL_CURSOR_DYNAMIC
SQL_ROWSET_SIZE	Valor entero que especifica el número de filas del conjunto de filas, es decir, el número de filas que devuelve cada llamada a SQLExtendedFetch. El valor predeterminado es 1.
SQL_BIND_TYPE	Valor entero que establece la orientación a emplear cuando se llama a SQLExtendedFetch en el hstmt asociado. Se admite una orientación tanto de fila como de columna.
SQL Server admite cursores estáticos de sólo lectura y éstos se exponen a través del controlador SQL Server. Las aplicaciones que necesiten cursores estáticos actualizables deben elegir la implementación de la Biblioteca de cursores estableciendo SQL_ODBC_CURSORS a SQL_CUR_USE_ODBC. Los cursores proporcionados por la Biblioteca de cursores se implementan en el cliente. Todos los datos se incluyen en caché y las actualizaciones y eliminaciones se emiten generando una cláusula WHERE con los valores incluidos en caché.

Los cursores implementados en el servidor (sólo envío, conjunto de teclas, dinámico, estático de sólo lectura) se pueden especificar con una opción de control de concurrencia de sólo lectura, bloqueo, versión de fila o valores de fila. Los cursores implementados por la biblioteca de cursores pueden ser de sólo lectura o de valores de fila.

No se admiten los cursores mixtos. El valor SQL_KEYSET_SIZE se convierte automáticamente a 0 si se especifica un valor distinto de cero.


SQLSetScrollOptions

La función SQLSetScrollOptions permite a la persona que llama establecer opciones que controlan el comportamiento del cursor. En ODBC 2.0, estas opciones se han visto anuladas por las opciones correspondientes en la función SQLSetStmtOption y solamente se admiten por compatibilidad con versiones anteriores. Las opciones se incluyen en las tres categorías siguientes:

Opción	Valor
Control de concurrencia	SQL_CONCUR_READ_ONLY SQL_CONCUR_LOCK SQL_CONCUR_ROWVER SQL_CONCUR_VALUES
Sensibilidad	SQL_CURSOR_FORWARD_ONLY SQL_CURSOR_STATIC SQL_CURSOR_KEYSET_DRIVEN SQL_CURSOR_DYNAMIC
Tamaño de conjunto de filas	Valor entero


SQLSetConnectOption

La función SQLSetConnectOption permite a la persona que llama establecer opciones que controlan los aspectos de la conexión.

Se admiten las siguientes opciones relacionadas con el cursor.

Opción	Valor
SQL_ODBC_CURSORS	SQL_CUR_USE_IF_NEEDED SQL_CUR_USE_ODBC SQL_CUR_USE_DRIVER
SQL_TXN_ISOLATION	SQL_TXN_READ_UNCOMMITTED SQL_TXN_READ_COMMITTED SQL_TXN_REPEATABLE_READ SQL_TXN_SERIALIZABLE La opción SQL_TXN_VERSIONING no se admite  (En SQL Server, la lectura repetible se trata como si fuera serializable).
Opción específica del controlador	SQL_PRESERVE_CURSORS que le permite elegir entre cerrar o conservar el estado del cursor a través de realizaciones/retrocesos de transacciones. El valor predeterminado es cerrar los cursores tras la realización/retroceso de una transacción.


SQLSetCursorName

La función SQLSetCursorName asocia un nombre de cursor con un hstmt activo. El nombre de cursor se crea automáticamente si no se especifica ninguno.


SQLGetCursorName

La función SQLGetCursorName devuelve el nombre de cursor asociado con un hstmt especificado. El nombre del cursor puede ser especificado por el usuario o generado por el sistema. Solamente se puede llamar a esta función si se ha llamado previamente a SQLSetCursorName o después de abrir el cursor (emitiendo una operación ExecuteDirect, Execute o Catalog). El nombre del cursor es válido mientras dure el hstmt, es decir, si se cierra el cursor y se abre otro, el controlador vuelve a utilizar el nombre anterior. Se necesitan nombres de cursor para emitir actualizaciones y eliminaciones posicionadas.


SQLGetStmtOption

La función SQLGetStmtOption devuelve la configuración actual de opciones especificadas en SQLSetStmtOption más un par de indicadores adicionales. SQL_ROW_NUMBER especifica el número de la fila actual en todo el conjunto de resultados. Esta opción se admite para cursores de conjunto de teclas y estáticos; de lo contrario, se devuelve 0.


SQLGetInfo

La función SQLGetInfo devuelve información acerca de un controlador y un origen de datos específicos. Si desea ver los valores que proporciona el controlador SQL Server, consulte el tema Valores devueltos por SQLGetInfo.


Recuperación de datos desde cursores

Existen dos métodos para recuperar datos a través de cursores.

•	Puede vincular columnas del conjunto de resultados con ubicaciones de almacenamiento utilizando SQLBindCol y a continuación emplear SQLFetch para avanzar hasta la siguiente fila del conjunto de resultados. Para las búsquedas de gran volumen, existe la posibilidad de vincular columnas a una matriz y utilizar SQLExtendedFetch. El controlador SQL Server admite vinculación por filas así como por columnas. Tenga presente que al utilizar cursores de servidor, cada operación de Búsqueda (Fetch) o Búsqueda extendida (Extended Fetch) implica una vuelta al servidor y que la conexión permanece libre entre estas operaciones. El servidor realiza un seguimiento de toda la información de estado necesaria (por ejemplo, la posición actual del cursor). Además, las operaciones del cursor no necesitan ser secuenciales. El servidor le permite mover el cursor hacia delante o hacia atrás en relación con la posición actual. También puede señalar directamente a un número absoluto de fila (excepto para los cursores dinámicos) del conjunto de resultados.

•	Puede recuperar datos para columnas no vinculadas (columnas cuyo almacenamiento no se ha asignado). Utilice SQLFetch o SQLExtendedFetch para situar el cursor en la siguiente fila y llame a SQLGetData para recuperar datos para columnas no vinculadas específicas. Se permite llamar a SQLGetData múltiples veces en la misma columna para introducir los datos de manera incremental. Esto resulta útil si va a leer grandes cantidades de datos de una columna de texto o imagen. No obstante, tenga en cuenta que la conexión permanecerá ocupada hasta que lea todos los datos asociados con la columna. Si emite un SQLSetPos con la opción Posición, el controlador SQL Server descarga el resto de los datos y libera la conexión, permitiéndole de esta manera utilizarlo para el procesamiento en otro hstmt.

Puede recuperar datos de columnas tanto vinculadas como no vinculadas de la misma fila.

Al recuperar filas que impliquen columnas de texto e imagen potencialmente grandes, si no desea acceder al campo de datos de texto de la fila, no vincule dicha columna. Cuando efectúa una Búsqueda extendida (Extended Fetch), la fila recuperada solamente contendrá el textptr para la columna no vinculada, en lugar del comportamiento anterior que era devolver toda la fila, incluyendo los datos de texto.

Los siguientes temas explican funciones de ODBC relevantes:

SQLFetch

SQLExtendedFetch

SQLRowCount


SQLFetch

La función SQLFetch busca una fila de datos en el conjunto de resultados. No se puede mezclar con SQLExtendedFetch para el mismo cursor. Además, SQLFetch es de sólo envío.


SQLExtendedFetch

La función SQLExtendedFetch devuelve a la aplicación un conjunto de filas (establecido en SQLSetStmtOption) de datos. Toma como entrada el controlador de la instrucción, el tipo de búsqueda y el número de la fila a buscar. Devuelve el número de filas buscadas realmente y, opcionalmente, una matriz que contiene valores de estado para cada fila.

Se admiten los siguientes tipos de búsqueda:

SQL_FETCH_NEXT
(necesario cuando el tipo de cursor es SQL_CURSOR_FORWARD_ONLY)

SQL_FETCH_FIRST

SQL_FETCH_LAST

SQL_FETCH_PRIOR

SQL_FETCH_ABSOLUTE
(no admitido para cursores dinámicos)

SQL_FETCH_RELATIVE

Los tipos SQL_FETCH_BOOKMARK y SQL_FETCH_RESUME no se admiten.


SQLRowCount

Si se llama a esta función después de abrir el cursor y el cursor es del tipo conjunto de teclas o estático, la función SQLRowCount devuelve el número de filas del conjunto de resultados. Para los cursores dinámicos, SQLRowCount siempre devuelve 1. Si el conjunto de teclas se está generando de manera asíncrona (consulte la documentación de SQL Server acerca de sp_configure) SQLRowCount devolverá 1 hasta que el conjunto de teclas se genere plenamente.


Actualización de cursores

Los datos se suelen modificar fila a fila (existe una opción en SQLSetPos que actúa sobre todo el conjunto de filas) después de colocarse en la fila deseada. Para situar el cursor en una fila determinada, puede:

•	llamar a SQLFetch una o más veces.

•	llamar a SQLExtendedFetch una o más veces.

•	llamar a SQLSetPos con la opción SQL_POSITION.

Existen dos maneras de modificar los datos en el conjunto de resultados.

•	Puede emitir UPDATE .... WHERE CURRENT OF nombre_cursor o DELETE WHERE CURRENT OF nombre_cursor para actualizar o eliminar la fila señalada actualmente por el cursor. La instrucción UPDATE o DELETE posicionada se debe emitir en un hstmt independiente en la misma conexión y requiere el nombre del cursor (que puede establecer explícitamente utilizando la función SQLSetCursorName). Este método le permite trabajar con varios cursores simultáneamente.

•	Puede utilizar la función SQLSetPos para agregar, eliminar y actualizar filas de datos. La API SQLSetPos proporciona opciones para especificar la operación deseada, el número de la fila destino y la forma de bloquear la fila. SQLSetPos solamente se puede utilizar en conjuntos de teclas buscados con SQLExtendedFetch.

Los siguientes temas explican funciones de ODBC relevantes:

SQLSetPos

SQLRowCount


SQLSetPos

La función SQLSetPos permite a una aplicación establecer la posición del cursor en un conjunto de filas y ejecutar una operación basada en dicha posición. La función toma como entrada el controlador de la instrucción, la posición de la fila en el conjunto de filas (donde se debe ejecutar la operación), el tipo de operación y un parámetro adicional que describe la forma de bloquear la fila después de ejecutar la operación.

El argumento irow especifica el número de la fila (en el conjunto de filas) en la cual ejecutar la operación. Si irow = 0, la operación se aplica a todo el conjunto de filas.

Se admiten las siguientes operaciones:

SQL_POSITION

SQL_REFRESH

SQL_UPDATE

SQL_DELETE

SQL_ADD

Se admiten los siguientes tipos de bloqueo:

SQL_LOCK_NO_CHANGE

Observe que si se marca una fila como eliminada (SQL_ROW_DELETED), y posteriormente se inserta otra con los mismos valores de clave que la fila anterior, una operación SQL_REFRESH mostrará la fila nueva (SQL_ROW_SUCCESS) en la posición antigua.


Función SQLRowCount
SQLRowCount

La función SQLRowCount devuelve el número de filas afectadas por una instrucción UPDATE, INSERT o DELETE, o bien por las operaciones SQL_UPDATE, SQL_ADD o SQL_DELETE en SQLSetPos. Puede llamar a SQLRowCount después de ejecutar una actualización de la base de datos.


Cierre de cursores

Los cursores se cierran automáticamente si realiza o retrocede la transacción. El controlador SQL Server proporciona una opción de conexión específica para el controlador, SQL_PRESERVE_CURSORS, que anula este comportamiento para los cursores del servidor. Si esta opción está establecida como SQL_PC_ON, los cursores permanecen abiertos y el estado del cursor se conserva a través de realizaciones y retrocesos de la transacción.

Los siguientes temas explican funciones importantes de ODBC:

SQLFreeStmt

SQLTransact


SQLFreeStmt

La función SQLFreeStmt detiene el procesamiento asociado con una instrucción específica, cierra los cursores abiertos, descarta los resultados pendientes y, opcionalmente, libera todos los recursos asociados con el controlador de instrucciones.

Se admiten las siguientes opciones relacionadas con el cursor:

SQL_CLOSE

SQL_DROP


SQLTransact

La función SQLTransact solicita una operación de realización o retroceso para todas las operaciones activas en todas las instrucciones asociadas con la conexión. Todos los cursores de servidor abiertos permanecen abiertos después de esta operación si SQL_PRESERVE_CURSORS se ha establecido a SQL_PC_ON. De forma predeterminada, los cursores se cierran al ejecutar Commit/Rollback.


Implementación de la función API de ODBC

El controlador SQL Server admite DLL de conversión además de las funciones que se enumeran a continuación. Si desea una explicación de la forma en que se implementa cada función compatible, haga clic en la función.

Función	Descripción
SQLBrowseConnect	SQLBrowseConnect utiliza tres niveles de palabras clave: 1. DSN, DRIVER 2. SERVER, UID, PWD, APP y WSID 3. DATABASE y LANGUAGE
SQLConnect	SQLConnect admite los valores predeterminados DATABASE y LANGUAGE.
SQLDriverConnect	SQLDriverConnect utiliza las palabras clave DSN, DRIVER, SERVER, UID, PWD, APP, WSID, DATABASE, y LANGUAGE.
SQLColAttributes, SQLDescribeCol y SQLNumResultCols	Si llama a cualquiera de estas funciones después de preparar una instrucción SELECT y antes de ejecutarla, el controlador SQL Server utiliza SET FMTONLY para hacer que SQL Server genere la información necesaria acerca del conjunto de resultados.
SQLConfigDataSource	SQLConfigDataSource agrega, modifica o elimina dinámicamente un origen de datos utilizando palabras clave para establecer las opciones de conexión.
SQLPrepare	SQL Server no admite directamente el modelo Preparar/Ejecutar de ODBC. Para preparar una instrucción SQL, el controlador SQL Server crea un procedimiento temporal que la compila para su posterior ejecución. Observe que la generación de procedimientos almacenados para SQLPrepare se puede desactivar en el cuadro de diálogo Instalación del controlador SQL Server de ODBC o en la función SQLSetConnectOption. Si está desactivada, la instrucción SQL se almacena y envía al servidor cada vez que se ejecuta.
SQLParamOptions	La función SQLParamOptions permite a una aplicación especificar una matriz de múltiples valores para los parámetros asignados por SQLBindParameter. Llamando a SQLParamOptions con un argumento crow mayor que 1, el controlador genera un lote de instrucciones SQL o un lote de procedimientos almacenados para ejecutar múltiples instrucciones SQL.
SQLDescribeParam	La función SQLDescribeParam devuelve la descripción de un marcador de parámetro asociado con una instrucción SQL preparada.
SQLRowCount	Si llama a esta función después de un cursor abierto y el cursor es del tipo conjunto de teclas o estático, la función devuelve el número de filas del conjunto de resultados. Para los cursores dinámicos, SQLRowCount siempre devuelve 1. Si el conjunto de teclas se está generando de manera asíncrona, SQLRowCount devolverá 1 hasta que termine de generarse dicho conjunto de teclas.
SQLTablePrivileges	El controlador no admite patrones de búsqueda para el propietario de la tabla ni para parámetros de nombre de tabla.
SQLTables	El controlador no admite patrones de búsqueda para el parámetro cualificador de tabla.


SQLBrowseConnect

SQLBrowseConnect usa tres niveles de información de conexión. Para cada palabra clave, la siguiente tabla indica si devuelve una lista de valores válidos, y si la palabra clave es opcional. Para obtener la descripción de una palabra clave, haga clic en ella.

Nivel	Palabra clave	¿Devuelve lista de valores válidos?	Opcional	Descripción
1	DSN	No disponible	No	El nombre del origen de datos tal y como lo devuelve SQLDataSources. La palabra clave DSN no se usa si se emplea DRIVER.
	DRIVER	No disponible	No	El nombre del controlador tal y como lo devuelve SQLDrivers. La palabra clave DRIVER no se usa si se emplea DSN. El nombre del controlador SQL Server es {SQL Server}. (Para los programas de 16 bits, el nombre del controlador de 32 bits es {SQL Server (32 bits)}.)
2	SERVER	Sí	No	El nombre del servidor en la red donde reside el origen de datos. Si se ejecuta en Microsoft Windows NT, puede indicar "(local)" como servidor, en cuyo caso puede emplear una copia local de SQL Server, aunque sea una versión no integrada en red. Observe que cuando en controlador SQL Server de 16 bits utiliza "(local)" sin red, debe instalar el "Adaptador MS Loopback".
	UID	No	Sí	El ID de inicio de sesión del usuario.
	PWD	No	Sí (depende del usuario)	La contraseña especificada por el usuario.
	APP	No	Sí	El nombre de la aplicación (NombreAp) que llama a SQLBrowseConnect.
	WSID	No	Sí	El ID de la estación de trabajo. Normalmente, es el nombre de red del PC donde reside la aplicación.
3	DATABASE	Sí	Sí	El nombre de la base de datos SQL Server.
	LANGUAGE	Sí	Sí	El idioma que debe utilizar SQL Server.
SQLBrowseConnect ignora los valores de las palabras clave Database y Language almacenadas en las definiciones de origen de datos ODBC. Si la base de datos o el idioma especificados en la cadena de conexión transferida a SQLBrowseConnect no es válido, SQLBrowseConnect devuelve SQL_NEED_DATA y los atributos de conexión de nivel 3.

SQLBrowseConnect no verifica el acceso del usuario a todas las bases de datos enumeradas con la palabra clave DATABASE. Si el usuario no tiene acceso a la base de datos elegida, SQLBrowseConnect devuelve SQL_NEED_DATA y los atributos de conexión de nivel 3.

Vea también

SQLConnect

SQLDriverConnect


SQLConnect

La función SQLConnect utiliza las siguientes palabras clave:

Parámetro	Implementación
DSN	El nombre del origen de datos, tal y como lo devuelve SQLDataSources.
UID	El ID de inicio de sesión del usuario.
AuthStr	La cadena de autentificación especificada por el usuario (normalmente, la contraseña).
SQLConnect recupera el valor de la palabra clave LANGUAGE desde la definición del origen de datos ODBC. Si el controlador SQL Server no puede utilizar el idioma especificado, utiliza el idioma predeterminado para el ID de usuario especificado, y SQLConnect devuelve SQL_SUCCESS_WITH_INFO. Si SQL Server no puede utilizar el idioma predeterminado del ID de usuario especificado, SQLConnect devuelve SQL_ERROR.

SQLConnect recupera el valor de la palabra clave DATABASE desde la definición del origen de datos ODBC. Si el controlador SQL Server no puede utilizar la base de datos especificada, emplea la base de datos predeterminada para el ID de usuario, y SQLConnect devuelve SQL_SUCCESS_WITH_INFO. Si SQL Server no puede utilizar la base de datos predeterminada para el ID de usuario especificado, SQLConnect devuelve SQL_ERROR.

Vea también

SQLBrowseConnect

SQLDriverConnect


SQLDriverConnect

La cadena de conexión SQLDriverConnect utiliza las siguientes palabras clave:

Palabra clave	Descripción
DSN	El nombre del origen de datos tal y como lo devuelve SQLDataSources. La palabra clave DSN no se utiliza si se emplea DRIVER.
DRIVER	El nombre del controlador tal y como lo devuelve SQLDrivers. La palabra clave DRIVER no se utiliza si se emplea DSN. El nombre del controlador SQL Server es {SQL Server}.
SERVER	El nombre del servidor en la red donde reside el origen de datos. En un PC Microsoft Windows NT, se admite "(local)" como servidor, en cuyo caso se podrá emplear una copia local de SQL Server, aunque sea una versión no integrada en red. Observe que cuando el controlador SQL Server de 16 bits utiliza "(local)" sin red, es necesario instalar el "Adaptador MS Loopback".
UID	El ID de inicio de sesión del usuario.
PWD	La contraseña especificada por el usuario.
APP	El nombre de la aplicación que llama a SQLDriverConnect (opcional).
WSID	El ID de la estación de trabajo. Normalmente, se trata del nombre de red del PC donde reside la aplicación (opcional).
DATABASE	El nombre de la base de datos de SQL Server (opcional).
LANGUAGE	El idioma que debe utilizar SQL Server (opcional).
SQLDriverConnect utiliza los valores de palabras clave incluidos en el cuadro de diálogo (si hay alguno desplegado). Si en el cuadro de diálogo no se ha establecido el valor de una palabra clave, SQLDriverConnect extrae el valor de la cadena de conexión. Si el valor no se estableció en la cadena de conexión, emplea el valor del archivo ODBC.INI.

Si el argumento fDriverCompletion es SQL_DRIVER_NOPROMPT o SQL_DRIVER_COMPLETE_REQUIRED, el idioma o la base de datos provienen de la cadena de conexión, y no son válidos, SQLDriverConnect devuelve SQL_ERROR.

Si el argumento fDriverCompletion es SQL_DRIVER_NOPROMPT o SQL_DRIVER_COMPLETE_REQUIRED, el idioma o la base de datos provienen de las definiciones de origen de datos ODBC, y no son válidos, SQLDriverConnect utiliza el idioma o la base de datos predeterminados para el ID de usuario especificado y devuelve SQL_SUCCESS_WITH_INFO.

Si el argumento fDriverCompletion es SQL_DRIVER_COMPLETE o SQL_DRIVER_PROMPT y el idioma o la base de datos no son válidos, SQLDriverConnect vuelve a mostrar el cuadro de diálogo.

Por ejemplo, para conectarse al origen de datos Recursos humanos en el servidor HRSERVER utilizando el ID de inicio de sesión Álvarez y la contraseña Sésamo, utilizaría la siguiente cadena de conexión:

DSN=Recursos humanos;UID=Álvarez;PWD=Sésamo

Para especificar la base de datos Nómina en el mismo servidor, emplearía la siguiente cadena de conexión:

DSN=Recursos humanos;UID=Álvarez;PWD=Sésamo;DATABASE=Nómina

Para especificar el controlador SQL Server (el nombre del controlador es {SQL Server}) y el nombre del servidor directamente sin utilizar ningún DSN, utilizaría la siguiente cadena de conexión:

DRIVER={SQL Server};SERVER=hrserver;UID=Álvarez;PWD=Sésamo;
    DATABASE=Nómina

Vea también

SQLBrowseConnect

SQLConnect


SQLColAttributes, SQLDescribeCol y SQLNumResultCols

Microsoft SQL Server devuelve información sobre un conjunto de resultados antes de devolver los datos de dicho conjunto de resultados. El controlador SQL Server devuelve esta información a una aplicación a través de las funciones SQLColAttributes, SQLDescribeCol y SQLNumResultCols.

Cuando se conecta a SQL Server 6.0, el controlador SQL Server utiliza la instrucción SET FMTONLY para recuperar la información adecuada acerca de un conjunto de resultados.

Cuando se conecta a SQL Server versión 4.2x, si una aplicación llama a cualquiera de estas funciones después de que preparar una instrucción SELECT pero antes de ejecutarla, el controlador SQL Server envía la instrucción SELECT con la cláusula WHERE 1=2. Esto obliga a SQL Server a generar un conjunto de resultados sin filas, pero con la información acerca del conjunto de resultados.

Nota  Cuando se conecta a SQL Server 4.2x, SQLColAttributes, SQLDescribeCol y SQLNumResultCols no pueden devolver información acerca de un conjunto de resultados generados por un procedimiento en caso de que dicho procedimiento se haya preparado pero no ejecutado. Si la instrucción SELECT es la primera de un lote y se utiliza la gramática nativa de SQL Server (sin signos de punto y coma entre las instrucciones), los resultados de estas funciones son impredecibles. Observe también que la palabra "SELECT" debe ser el primer testigo del búfer. Si en la instrucción a preparar se incluye algo delante de la palabra "SELECT", "WHERE 1=2" no se agregará a la instrucción SELECT y no se devolverá la información relativa al conjunto de resultados.


SQLConfigDataSource

La función SQLConfigDataSource sirve para agregar, modificar o eliminar dinámicamente un origen de datos y utiliza las palabras clave que se enumeran a continuación. Observe que para esta función solamente es obligatoria la palabra clave SERVER; todas las demás son opcionales.

Palabra clave	Descripción
ADDRESS	La dirección de red del sistema de administración de bases de datos SQL Server desde el cual el controlador recupera los datos.
DATABASE	El nombre de la base de datos de SQL Server.
DESCRIPTION	Descripción de los datos del origen de datos.
LANGUAGE	El idioma que debe emplear SQL Server.
NETWORK	La biblioteca de red que conecta las plataformas donde residen SQL Server y el controlador SQL Server.
OEMTOANSI	Permite la conversión del conjunto de caracteres OEM al conjunto de caracteres ANSI si el equipo cliente SQL Server y SQL Server utilizan el mismo conjunto de caracteres distinto de ANSI. Los valores válidos son YES para activarla (conversión activada) y NO para desactivarla. El valor predeterminado se establece utilizando la Herramienta de configuración de cliente.
SERVER	El nombre del PC en red donde reside el origen de datos.
TRANSLATIONDLL	El nombre de la DLL que convierte los datos que pasan entre una aplicación y un origen de datos.
TRANSLATIONNAME	El nombre del conversor que convierte los datos que pasan entre una aplicación y un origen de datos.
TRANSLATIONOPTION	Permite la conversión de datos que pasan entre una aplicación y un origen de datos.
USEPROCFORPREPARE	Desactiva la generación de procedimientos almacenados para SQLPrepare. Los valores válidos son NO para desactivarla (generación desactivada) y YES para activarla. El valor predeterminado (establecido en el cuadro de diálogo Instalación) es YES.
Observe que los pares de palabras clave en cadenas SQLConfigDataSource terminan en byte nulo (\0), y que la propia cadena también termina en byte nulo (\0). Por ejemplo:

DSN=Recursos humanos\0SERVER=hrserver\0ADDRESS=hrnetaddr\0
NETWORK=DBMSSOCN\0DATABASE=nómina\0\0


SQLPrepare

SQL Server no admite directamente el modelo Prepare/Execute de ODBC.

En primer lugar, se crea un procedimiento almacenado temporal a partir de la instrucción, puesto que los procedimientos almacenados son un método eficiente para ejecutar una instrucción dos o más veces. El procedimiento se denomina "#odbc#identificadorUsuario", donde Usuario es un máximo de 6 caracteres del nombre de usuario e identificador tiene un máximo de 8 dígitos e identifica la instrucción. El procedimiento se crea en tiempo de preparación si se han establecido todos los parámetros, o en tiempo de ejecución si no se establecieron todos los parámetros durante la preparación, o si alguno de tales parámetros se ha restablecido desde el momento de la creación del procedimiento. Debido a esto, SQLExecute tiene capacidad para devolver cualquier error que pueda devolver SQLPrepare.

Si CREATE PROCEDURE devuelve un error, SQLPrepare envía la instrucción a SQL Server con la opción SET NOEXEC o SET PARSEONLY (dependiendo del tipo de instrucción). SQL Server comprueba la sintaxis de la instrucción y devuelve cualquier posible error.

Si un usuario no puede crear un procedimiento almacenado por cualquier razón (como falta de permisos), el controlador SQL Server no utiliza ningún procedimiento almacenado, sino que envía la instrucción SQL cada vez que se llama a SQLExecute.

Puede desactivar la generación de procedimientos almacenados para SQLPrepare. Si está desactivada, la instrucción se almacenará y se volverá a ejecutar en tiempo de ejecución. La generación de procedimientos almacenados se puede desactivar siguiendo dos procedimientos:

•	Desactivando la casilla de verificación de la opción "Generar procedimientos almacenados para instrucciones preparadas" en el cuadro de diálogo Instalación del controlador SQL Server de ODBC.

•	Estableciendo la opción SQL_USE_PROCEDURE_FOR_PREPARE de la función SQLSetConnectOption a SQL_UP_OFF.

Cuando la generación de un procedimiento almacenado está desactivada y la instrucción se almacena y ejecuta en tiempo de ejecución, toda verificación de errores de sintaxis se pospone hasta el tiempo de ejecución.

Observe que si se ha ejecutado SET NOCOUNT ON, múltiples instrucciones incorporadas en un solo procedimiento almacenado no crean múltiples resultados, como debieran. El controlador ignora los totales de fila generados por instrucciones SQL dentro de un procedimiento almacenado.


SQLParamOptions

La función SQLParamOptions permite a una aplicación especificar una matriz de múltiples valores para los parámetros asignados por SQLBindParameter. Llamando a SQLParamOptions con un parámetro crow mayor que 1, el controlador genera un lote de instrucciones SQL o un lote de procedimientos almacenados para ejecutar múltiples instrucciones SQL.

SQLParamOptions se suele utilizar con DML. Cualquier instrucción DDL utilizada con SQLParamOptions tendrá el mismo resultado que ejecutar la instrucción crow veces en serie. Para las instrucciones que no contienen marcadores de parámetros, la instrucción también se ejecutará crow veces.

Los lotes de procedimientos almacenados se usan para SQLPrepare / SQLExecute e invocaciones de procedimientos canónicos que no utilizan parámetros de datos en ejecución. Devuelven los parámetros de salida del procedimiento almacenado.

Un lote SQL (también denominado evento de lenguaje) se emplea para comandos SQL y para cualquier invocación de procedimiento canónico que utiliza parámetros de datos en ejecución. No devuelve los parámetros de salida de procedimientos almacenados. Si se utiliza una instrucción SELECT, devolverá múltiples conjuntos de resultados, y la aplicación deberá utilizar SQLMoreResults para procesarlos. Después de que las devoluciones de SQLParamData, SQLExecDirect o SQLExecute se realicen satisfactoriamente, el valor devuelto en pirow se establece en principio a 1, y SQLMoreResults incrementa este valor a medida que se procesa cada conjunto de resultados.

SQLRowCount devolverá el total de todas las filas afectadas por todas las instrucciones del SQL o del lote de procedimientos almacenados que no contengan instrucciones SELECT. El valor devuelto por SQLRowCount será indefinido si se incluyen una o varias instrucciones SELECT. Además, cuando el SQL original contiene múltiples instrucciones, el valor devuelto en pirow puede ser incorrecto.

Mientras procesa un lote, SQL Server puede devolver un error. En ciertos casos, SQL Server cancela solamente el comando activo y procesa el resto del lote. Para estos errores, fallarán una o varias ejecuciones, y SQLExecDirect, SQLExecute o SQLParamData devolverá SQL_ERROR. El valor devuelto en pirow se establecerá en crow porque se procesaron todas las filas de parámetros. SQLError devolverá los errores producidos, pero no hay ningún método para determinar las filas de parámetros que ocasionaron el error. Puesto que se procesaron todas las filas de parámetros, no es necesario volver a vincular ni continuar la ejecución.

En otros casos, un error hace que SQL Server cancele todo el lote. Para estos errores, el valor devuelto en pirow incluirá la fila de parámetros afectada. Debe volver a vincular y continuar la ejecución para procesar las demás filas de parámetros.

Cuando se truncan los datos de un parámetro, el procesamiento continúa para los demás parámetros. Se devuelve SQL_SUCCESS_WITH_INFO, junto con un mensaje de advertencia. No obstante, cuando se produce un error (como un error de conversión) en el cliente para uno de los parámetros, se detiene toda la ejecución por lotes, y no se realiza ninguna ejecución para ninguna fila.

Mientras que SQLParamData devuelve SQL_NEED_DATA, actualiza el valor de pirow a medida que procesa parámetros de datos en ejecución, y la SQLParamData final actualiza el valor de pirow basándose en los errores que puedan haber surgido durante la ejecución. Por consiguiente, el valor de pirow puede ser mayor durante el procesamiento de parámetros de datos en ejecución que al terminar la ejecución en caso de que surja algún error con una fila durante la ejecución.

Cuando se conecta a SQL Server 4.2x, SQLParamOptions tiene las siguientes limitaciones:

•	SQL Server 4.2x está limitado a aproximadamente 128.000 bytes para un solo evento de lenguaje. Si el uso de SQLParamOptions hace que se supere este límite, el controlador devolverá el mensaje de error de SQL Server.

•	SQL Server 4.2x no admite lotes de procedimientos almacenados. Por lo tanto, no devuelve los parámetros de salida de ningún procedimiento almacenado.

Observe que, al transferir un valor distinto de NULL para pirow, el controlador continuará colocando el número de fila activa en esa dirección de memoria, aunque SQLParamOptions se haya "desconectado" efectivamente transfiriendo un parámetro crow de 1. Por lo tanto, si la dirección pirow suministrada por la aplicación se convierte en una dirección no válida (por ejemplo, una variable local fuera del alcance) es posible que se produzca un fallo en el controlador.


SQLDescribeParam

La función SQLDescribeParam devuelve la descripción de un marcador de parámetro asociado con una instrucción SQL preparada.

Los marcadores de parámetro deben aparecer en las ubicaciones ODBC correctas, como se especifica en el documento Microsoft ODBC 2.0 Programmer's Reference and SDK Guide. Además, el controlador no admite los siguientes elementos:

•	Llamadas a SQLDescribeParam tras la ejecución.

•	Llamadas a SQLDescribeParam para llamadas a procedimientos almacenados. Se recomienda utilizar SQLProcedureColumns para procedimiento almacenados.

•	Extensión de la cláusula FROM de Transact-SQL a instrucciones UPDATE y DELETE.

•	Marcadores de parámetro en una subconsulta. El controlador devolverá un error.


Soporte de SQL

El controlador SQL Server admite plenamente la gramática base de SQL, con la excepción de la palabra clave USER. El controlador SQL Server también admite casi todas las instrucciones SQL de la gramática extendida de ODBC. De acuerdo con el diseño de ODBC, el controlador SQL Server transferirá la gramática nativa del SQL a SQL Server.

Si desea detalles sobre la implementación y las limitaciones de la gramática del SQL de ODBC por parte del controlador SQL Server, consulte los siguientes temas de Ayuda.

Limitaciones de la gramática del SQL

Gramática del SQL de ODBC no admitida

Resolución de nulidad


Limitaciones de la gramática del SQL

El controlador SQL Server y SQL Server imponen las siguientes limitaciones de programación a la gramática del SQL de ODBC:

Gramática del SQL	Limitaciones
Limitaciones de parámetros de datos en ejecución	Los parámetros de datos en ejecución que se utilizan para enviar más de 65.535 bytes de datos para una columna SQL_LONGVARCHAR o SQL_LONGVARBINARY están sujetos a diversas restricciones. Si desea más detalles, consulte el tema Limitaciones de parámetros de datos en ejecución.
OUTER JOIN	La condición de búsqueda para una combinación externa debe ser una condición de equivalencia (=). La extensión de la combinación externa de ODBC debe aparecer en último lugar en la lista de referencia de tabla. SQL Server no admite combinaciones externas anidadas junto con combinaciones internas anidadas dentro de una combinación externa. Una tabla no puede ser la tabla interna de una combinación externa y participar a la vez en una combinación interna. Una tabla no puede ser la tabla interna de una combinación externa y la tabla externa de otra combinación externa. No obstante, una tabla sí puede participar en una combinación interna y ser la tabla externa de una combinación externa.
Procedimientos	Los procedimientos se deben invocar como la primera instrucción de un lote de instrucciones preparado, o bien se deben invocar con la palabra clave EXECUTE o empleando la innovación de procedimiento canónico de ODBC. Si desea más detalles, consulte el tema Limitaciones de la invocación de procedimientos.


Limitaciones de parámetros de datos en ejecución

Si utiliza un parámetro de datos en ejecución para enviar más de 65.535 bytes de datos para una columna SQL_LONGVARCHAR (texto) o SQL_LONGVARBINARY (imagen), debe tener en cuenta las siguientes limitaciones:

•	Se puede usar solamente como un valor_insert en una instrucción INSERT.

•	Se puede usar solamente como una expresión en la cláusula SET de una instrucción UPDATE.

•	No se puede usar en una instrucción con parámetros de datos en ejecución cuyo tipo de datos sea distinto a SQL_LONGVARCHAR o SQL_LONGVARBINARY.

•	Se puede usar en una instrucción con parámetros no de datos en ejecución de cualquier tipo de datos.

•	Si tiene el valor NULL, el argumento cbColDef de SQLBindParameter y el argumento cbValueMax de SQLPutData deben ser SQL_NULL_DATA.

•	Cancelar la operación (llamadas a SQLPutData para una columna después de que SQLParamData devuelva SQL_NEED_DATA) antes de que termine provocará una actualización parcial. La columna de texto o imagen que estaba procesando al cancelar se establecerá con un valor intermedio de "marcador de posición", y las columnas de texto o imagen no procesadas permanecerán sin cambios.


Limitaciones de invocación de procedimientos

Si la primera instrucción de un lote es una instrucción que ejecuta un procedimiento, la palabra clave EXECUTE no es necesaria. Si esta instrucción no es la primera, es obligatorio incluir la palabra clave EXECUTE. Esto se debe a que el controlador SQL Server incluye otras instrucciones SQL alrededor de una instrucción que está preparando, por lo que la instrucción que está preparando ya no es la primera del lote.

Para obtener la máxima operatividad, los procedimientos se deben invocar utilizando la extensión ODBC para el SQL diseñado para este propósito. Con el controlador SQL Server, no existe ninguna ventaja en preparar una instrucción que invoca un procedimiento (en lugar de ejecutarlo directamente). Cuando está seleccionada la opción "Generar procedimientos almacenados para instrucciones preparadas", el controlador SQL Server prepara una instrucción incluyéndola en un procedimiento y compilando dicho procedimiento.

Si embargo, es posible desactivar la preparación de una instrucción mediante su colocación en un procedimiento y su compilación. Con el fin de garantizar que no se utilizan nunca los procedimientos almacenados para implementar SQLPrepare, desactive la casilla de verificación de la opción "Generar procedimientos almacenados" en el cuadro de diálogo Instalación de SQL Server, o bien establezca la opción SQL_USE_PROCEDURE_FOR_PREPARE de SQLSetConnectOption con el valor SQL_UP_OFF. Esto le garantiza que una instrucción preparada se almacena y se ejecuta en tiempo de ejecución. En este caso, los procedimientos almacenados no se utilizarán para implementar SQLPrepare. Además, toda verificación de errores de sintaxis se pospone hasta el momento de la ejecución.

Cuando se ejecuta una instrucción SET NOCOUNT ON, múltiples instrucciones incorporadas en un procedimiento almacenado no crean múltiples resultados, como deberían. El controlador ignora los totales de fila generador por instrucciones SQL dentro de un procedimiento almacenado.

Literales como parámetros para llamadas de procedimientos almacenados

Observe que no se permite transferir un literal de NULL a un parámetro de procedimiento almacenado definido como datetime o smalldatetime.

Cursores que emplean procedimientos almacenados

Los cursores de servidor solamente se pueden abrir en un procedimiento almacenado que contiene una sola instrucción SELECT. Utilizar un procedimiento almacenado que no contenga instrucciones SELECT, o que contenga varias instrucciones SELECT, generará un error. Debido a esta limitación, no se pueden utilizar cursores de servidor con las funciones de catálogo de ODBC.


Gramática del SQL de ODBC no admitida

El controlador SQL Server admite plenamente toda la gramática del SQL de ODBC base y extendida, con las siguientes excepciones.

Gramática no admitida	Descripción
DAYOFWEEK	La función escalar DAYOFWEEK no se admite cuando está conectado a la versión 4.2x. Esta función sí se admite al conectarse a SQL Server 6.0.
DELETE	La cláusula WHERE CURRENT OF nombre_cursor (instrucción de eliminación posicionada) no se admite cuando está conectado a SQL Server versión 4.2x.
DROP INDEX	Debe utilizar nombre_tabla, nombre_índice en lugar de solamente nombre_índice.
IEF	Ninguna de las cláusulas de la Facilidad de mejora de la integridad (IEF) se admiten cuando está conectado a SQL Server versión 4.2x.
MAX, MIN	La palabra clave DISTINCT no se admite para estas funciones de conjuntos.
SELECT	La cláusula FOR UPDATE OF (instrucción SELECT-FOR-UPDATE) no se admite cuando está conectado a SQL Server versión 4.2x.
UPDATE	La cláusula WHERE CURRENT OF nombre_cursor (instrucción UPDATE posicionada) no se admite cuando está conectado a SQL Server versión 4.2x.
USER	No se admite la palabra clave USER, excepto en la cláusula DEFAULT de la IEF.


hstmt activo

El controlador SQL Server solamente puede tener un hstmt activo a menos que se utilice con cursores de servidor; esta información la devuelve a través de SQLGetInfo con la opción SQL_ACTIVE_STATEMENTS. Un hstmt se define como activo si tiene resultados pendientes. En este contexto, resultados es cualquier información devuelta por SQL Server, como un conjunto de resultados o una cuenta de las filas afectadas por una instrucción UPDATE.

Nota  La actividad de un hstmt no está relacionada con su estado. Por ejemplo, si se ejecuta una instrucción SELECT y no devuelve ninguna fila, la instrucción no está activa, puesto que no hay resultados pendientes. No obstante, antes de que la instrucción se pueda ejecutar de nuevo, es necesario cerrar el cursor asociado con ella mediante SQLFreeStmt.

Los cursores de servidor admiten múltiples instrucciones activas en una sola conexión cuando están conectados a SQL Server 6.0.

Cuando está conectado a SQL Server versión 4.2x, el controlador SQL Server admite solamente una instrucción activa por conexión. La biblioteca de cursores (proporcionada con el controlador SQL Server) permite a las aplicaciones utilizar múltiples instrucciones activas en una conexión.


Biblioteca de cursores

La biblioteca de cursores (proporcionada con el controlador SQL Server) permite a las aplicaciones utilizar múltiples instrucciones activas en una conexión, así como cursores desplazables y actualizables. La biblioteca de cursores (ODBCCURS.DLL (16 bits) u ODBCCR32.DLL (32 bits)) debe estar cargada para admitir esta funcionalidad. Utilice SQLSetConnectOption para especificar la forma en que se debe usar la biblioteca de cursor, y SQLSetStmtOption para especificar el tipo de cursor, la concurrencia y el tamaño del conjunto de filas.


Errores aritméticos

Si se produce un error aritmético, como una división por cero o un desbordamiento numérico, durante la ejecución de una instrucción SQL, la instrucción se interrumpirá. Es posible que ya se hayan enviado resultados parciales al cliente y que éste los haya entregado a la aplicación antes de que la aplicación reciba notificación del error.

El controlador establece ARITHABORT al valor ON.

Si desea más información, consulte SET ARITHABORT y SET ARITHIGNORE en el manual Microsoft SQL Server Transact-SQL Reference.


Transacciones en modo de realización manual

Cuando el controlador SQL Server está en el modo de realización manual, inicia una transacción con una instrucción BEGIN TRANSACTION en las siguientes situaciones:

•	Una instrucción SQL está pendiente.

•	No hay ninguna transacción activa.

•	No se trata de una instrucción de Lenguaje de definición de datos (DDL) restringida.

Si desea más información sobre las instrucciones DDL restringidas, consulte en la sección relativa a Transacciones de la documentación Microsoft SQL Server Transact-SQL Reference la lista de instrucciones que no pueden estar incluidas en una transacción.

Para realizar o retroceder una transacción en el modo de realización manual, la aplicación debe llamar a SQLTransact. El controlador SQL Server envía una instrucción COMMIT TRANSACTION para realizar una transacción, y una instrucción ROLLBACK TRANSACTION para hacerla retroceder.

Una instrucción DDL restringida solamente se puede ejecutar en modo de realización manual bajo una de las siguientes circunstancias:

•	Después de establecer el modo de realización manual y antes de ejecutar una instrucción DDL o una instrucción de Lenguaje de manipulación de datos (DML) no restringida, o bien,

•	Después de realizar o retroceder una transacción y antes de ejecutar una instrucción DDL o DML no restringida.

Si desea más información sobre el modo de realización manual, consulte SQLSetConnectOption en Microsoft ODBC SDK Programmer's Reference.

Las siguientes funciones de catálogo de ODBC no se pueden llamar dentro de una transacción porque utilizan procedimientos almacenados de catálogo que crean tablas temporales:

SQLColumnPrivileges
SQLForeignKeys
SQLPrimaryKeys (limitado solamente en SQL Server 4.2x)
SQLStatistics
SQLTablePrivileges


Llamadas de procedimiento remoto

El controlador SQL Server utiliza la facilidad de llamada de procedimiento remoto (RPC) de SQL Server para ejecutar procedimientos en lugar de transferirlos a SQL Server en una instrucción SQL. Un procedimiento puede ser una instrucción preparada (que es una instrucción almacenada como procedimiento), un procedimiento llamado con la sintaxis de procedimientos ODBC o bien un procedimiento almacenado que el controlador SQL Server utiliza para implementar una función de catálogo. Las RPC ofrecen las siguientes ventajas sobre los procedimientos transferidos en una instrucción SQL:

•	Las RPC son más rápidas que los procedimientos transferidos en una instrucción SQL.

•	Las RPC pueden tener parámetros de salida (sin embargo, vea "Limitaciones", más abajo), mientras que los procedimientos transferidos en una instrucción SQL no los tienen. (Un procedimiento puede devolver un valor en cualquier caso).

Para ejecutar una instrucción como una RPC, una aplicación:

1.	Genera una instrucción SQL.

2.	Llama a SQLBindParameter para cada parámetro de la instrucción.

3.	Prepara la instrucción con SQLPrepare. (Observe que la opción de conexión SQL_USE_PROCEDURE_FOR_PREPARE se debe establecer a SQL_UP_ON).

4.	Ejecuta la instrucción con SQLExecute.

Para ejecutar un procedimiento como una RPC, una aplicación:

1.	Genera una instrucción SQL que utiliza la sintaxis de procedimientos de ODBC. La instrucción utiliza marcadores de parámetros para cada parámetro de entrada, entrada/salida y salida, así como para el valor devuelto por el procedimiento (si lo hay).

2.	Llama a SQLBindParameter para cada parámetro de entrada, entrada/salida y salida, así como para el valor devuelto por el procedimiento (si lo hay).

3.	Ejecuta la instrucción con SQLExecDirect.

Nota  Si una aplicación envía un procedimiento utilizando la sintaxis de SQL Server (en lugar de la sintaxis de procedimientos de ODBC), el controlador SQL Server transfiere la llamada de procedimiento a SQL Server como instrucción SQL en lugar de como RPC.

Limitaciones

Las RPC se ejecutan como eventos del lenguaje (EXEC Nombreproc Parámetros) si cualquiera de los parámetros está vinculado utilizando SQL_DATA_AT_EXEC.

Cuando una RPC se ejecuta en forma de evento del lenguaje, no se devuelve ningún valor de parámetro de salida.

Los parámetros de salida de un procedimiento almacenado también son parámetros de entrada, aunque el procedimiento de almacenado no puede utilizar el valor de entrada. No obstante, es necesario proporcionar un valor de entrada válido para impedir errores de conversión.

Para los parámetros de entrada/salida y los parámetros de salida, la longitud/precisión (cbColDef) y la escala (ibScale) establecidas mediante SQLBindParameter limitan los valores máximos que puede contener el valor de salida.


Referencias

Si desea más información sobre el Controlador SQL Server de ODBC, consulte los siguientes recursos:

Referencia	Ubicación
Microsoft ODBC 2.0 Programmer's Reference and SDK Guide	Microsoft Press
Referencia de API de ODBC	Libros en pantalla de SQL Server
Documentación de SQL Server	Libros en pantalla de SQL Server


Glosario

API

Application Programming Interface (Interfaz de programación de aplicaciones). Conjunto de rutinas disponibles en una aplicación para su uso por parte de los programadores de software al diseñar una aplicación.

juego de caracteres

Conjunto de 256 letras, números y símbolos específicos de un país o de un idioma. Cada juego de caracteres se define mediante una tabla llamada página de códigos. Un juego de caracteres OEM (Fabricante de Equipos Originales) es cualquier juego de caracteres excepto el juego de caracteres ANSI. El juego de caracteres ANSI (página de códigos 1252) es el que utiliza Microsoft Windows.

nivel de concordancia

Algunas aplicaciones sólo pueden utilizar aquellos controladores que admiten ciertos niveles de funcionalidad, también denominados niveles de concordancia (conformance levels). Por ejemplo, una aplicación podría requerir que los controladores pudieran solicitar del usuario la contraseña correspondiente a un origen de datos. Esta posibilidad forma parte del nivel de concordancia para la interfaz de programación de aplicaciones (API).

Los controladores ODBC concuerdan con uno de los tres niveles de API (Base, Nivel 1 o Nivel 2), y con uno de los tres niveles de la gramática SQL (Mínimo, Base o Extendido). Estos controladores pueden dar soporte a algunas de las funciones existentes en niveles superiores a su nivel nominal.

Si desea información detallada sobre los niveles de concordancia, consulte el manual Microsoft ODBC SDK Programmer's Reference.

origen de datos

Un origen de datos (data source) incluye los datos a los que desea acceder un usuario, así como la información necesaria para acceder a dichos datos. Estos son algunos ejemplos de orígenes de datos:

•	Una base de datos SQL Server, el servidor en que reside dicha base de datos, y la red utilizada para acceder a ese servidor.

•	Un directorio que contiene una serie de archivos dBASE a los que se desea acceder.

DBMS

Database Management System (Sistema de administración de bases de datos). En español también se utiliza el acrónimo SGBD. Se trata de un software empleado para organizar, analizar, buscar, actualizar y recuperar datos.

DDL

Data Definition Language (Lenguaje de definición de datos). Cualquier instrucción SQL que pueda utilizarse para definir objetos de datos y sus atributos. Por ejemplo, las instrucciones CREATE TABLE, DROP VIEW y GRANT.

DLL

Dynamic-Link Library (Biblioteca de vínculos dinámicos). Conjunto de rutinas a las que una o más aplicaciones pueden recurrir para realizar tareas comunes. Los controladores ODBC son en realidad DLL (bibliotecas de vínculos dinámicos).

DML

Data Manipulation Language (Lenguaje de manipulación de datos). Cualquier instrucción SQL que pueda utilizarse para manipular datos. Por ejemplo, las instrucciones UPDATE, INSERT y DELETE.

ODBC

Open Database Connectivity (Conectividad abierta de bases de datos). Se trata de un Administrador de controladores, junto con diversos controladores ODBC, que permiten a las aplicaciones acceder a los datos utilizando SQL como lenguaje estándar.

Administrador de controladores ODBC

Biblioteca de vínculos dinámicos (DLL) que facilita el acceso a los controladores de ODBC.

controlador ODBC

Biblioteca de vínculos dinámicos (DLL) que cualquier aplicación preparada para ODBC, como Microsoft Excel, puede utilizar para acceder a un determinado origen de datos. Cada sistema de administración de bases de datos (DBMS), como Microsoft SQL Server o como dBASE, requiere un controlador diferente.

SQL

Structured Query Language (Lenguaje de consulta estructurado). Lenguaje empleado para recuperar, actualizar y administrar datos.

instrucción SQL

Un comando escrito en el Lenguaje de consulta estructurado (SQL), también llamado simplemente una Consulta. Una instrucción SQL especifica una operación a realizar, por ejemplo SELECT, DELETE o CREATE TABLE, las tablas y columnas en las cuales realizar esa operación, y cualquier restricción a esa operación.

opción de conversión

Opción que determina la forma en que un convertidor debe convertir los datos. Por ejemplo, una opción de conversión podría especificar los juegos de caracteres entre los que un convertidor convierte los datos de caracteres. Una opción de conversión también podría suministrar una clave a efectos de criptografía (codificación y decodificación).

convertidor

Biblioteca de vínculos dinámicos (DLL) que convierte todos los datos que se transfieren entre una aplicación (como Microsoft Access) y un origen de datos. Los convertidores suelen utilizarse para convertir datos de caracteres entre distintos juegos de caracteres, pero también pueden realizar tareas de criptografía (codificación y decodificación), así como tareas de compresión y descompresión.