Compartir a través de


srv_convert (API de procedimiento almacenado extendido)

Nota importanteImportante

Esta característica se quitará en una versión futura de Microsoft SQL Server. No utilice esta característica en nuevos trabajos de desarrollo y modifique lo antes posible las aplicaciones que actualmente la utilizan. En su lugar, use la integración CLR.

Cambia los datos de un tipo de datos a otro.

Sintaxis


int srv_convert (
SRV_PROC *
srvproc
,
int
srctype
,
void *
src
,
DBINT
srclen
,
int
desttype
,
void *
  dest
,
DBINT
destlen
);

Argumentos

  • srvproc
    Es un puntero a la estructura SRV_PROC que es el identificador de una conexión cliente determinada. La estructura contiene toda la información de control que Procedimiento almacenado extendido usa para administrar las comunicaciones y los datos entre la aplicación y el cliente. Si se proporciona el identificador srvproc, cuando se produce un error, ese identificador se pasa a la función de control de errores de API Procedimiento almacenado extendido.

  • srctype
    Especifica el tipo de datos de los datos que se van a convertir. Este parámetro puede ser cualquiera de los tipos de datos de API Procedimiento almacenado extendido.

  • src
    Es un puntero a los datos que se van a convertir. Este parámetro puede ser cualquiera de los tipos de datos de API Procedimiento almacenado extendido.

  • srclen
    Especifica la longitud, en bytes, de los datos que se van a convertir. Si srclen es 0, srv_convert coloca un valor NULL en la variable de destino. A menos que sea 0, los tipos de datos de longitud fija pasan por alto este parámetro, en cuyo caso se supone que los datos de origen son NULL. Para los datos del tipo de datos SRVCHAR, una longitud de -1 indica que la cadena termina en NULL.

  • desttype
    Especifica el tipo de datos para convertir el origen. Este parámetro puede ser cualquiera de los tipos de datos de API Procedimiento almacenado extendido.

  • dest
    Es un puntero a la variable de destino que recibe los datos convertidos. Si este puntero es NULL, srv_convert llama al controlador de errores proporcionado por el usuario, si existe, y devuelve -1.

    Si desttype es SRVDECIMAL o SRVNUMERIC, el parámetro dest debe ser un puntero a una estructura DBNUMERIC o DBDECIMAL con los campos de escala y precisión de la estructura ya establecidos en los valores deseados. Puede usar DEFAULTPRECISION para especificar una precisión predeterminada y DEFAULTSCALE para especificar una escala predeterminada.

  • destlen
    Especifica la longitud, en bytes, de la variable de destino. Este parámetro se pasa por alto en los tipos de datos de longitud fija. Para una variable de destino de tipo SRVCHAR, el valor de destlen debe ser la longitud total del espacio en búfer del destino. Una longitud de -1 para una variable de destino de tipo SRVCHAR o SRVBINARY indica que hay suficiente espacio disponible. Una longitud de -1 hace que la cadena de caracteres termine en NULL para una variable de destino de tipo srvchar.

Devuelve

La longitud de los datos convertidos, en bytes, si la conversión de tipos de datos es correcta. Cuando srv_convert encuentra una solicitud para una conversión que no admite, llama al controlador de errores proporcionado por programador, si existe, establece un número de error global y devuelve -1.

Notas

La función srv_willconvert determina si se permite una conversión determinada.

La conversión a los tipos de datos numéricos aproximados SRVFLT4 o SRVFLT8 puede producir alguna pérdida de precisión. La conversión de los tipos de datos numéricos aproximados SRVFLT4 o SRVFLT8 a SRVCHAR o SRVTEXT también puede producir alguna pérdida de precisión.

La conversión a SRVFLTx, SRVINTx, SRVMONEY, SRVMONEY4, SRVDECIMAL o SRVNUMERIC puede producir un desbordamiento si el número es mayor que el valor máximo de destino, o un subdesbordamiento si el número es menor que el valor mínimo de destino. Si el desbordamiento se produce al convertir a SRVCHAR o SRVTEXT, el primer carácter del valor resultante contiene un asterisco (*) que indica el error.

Al convertir SRVCHAR en SRVBINARY, srv_convert interpreta SRVCHAR como hexadecimal, tanto si la cadena contiene una 0 inicial como si no. Al convertir SRVBINARY en SRVCHAR, srv_convert crea una cadena hexadecimal sin un 0 inicial. En todos los otros casos, una conversión a o desde el tipo de datos SRVBINARY es una copia de bits directa.

En ciertos casos, puede ser útil para convertir un tipo de datos en sí mismo. Por ejemplo, al convertir SRVCHAR en SRVCHAR con un destlen de -1, se agrega un terminador NULL a una cadena.

Para obtener una descripción de tipos de datos y de las conversiones de tipos de datos API Procedimiento almacenado extendido, vea Tipos de datos (API de procedimiento almacenado extendido).

Se puede producir un error en la función srv_convert por varias razones:

  • La conversión solicitada no está disponible.

  • La conversión producía el truncamiento, desbordamiento o pérdida de precisión en la variable de destino.

  • Se produjo un error de sintaxis al convertir una cadena de caracteres en un tipo de datos numéricos.

Nota de seguridadNota de seguridad

Debe revisar cuidadosamente el código fuente de los procedimientos almacenados extendidos y debe probar las DLL compiladas antes de instalarlas en el servidor de producción. Para obtener información acerca de la revisión y pruebas de seguridad, vea este sitio web de Microsoft.