Compartir a través de


srv_convert (API de procedimiento almacenado extendido)

Se aplica a: SQL Server

Importante

Esta característica se quitará en una versión futura de SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan. En su lugar, use la integración de 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, se pasa a la función del controlador de errores de la API de procedimiento almacenado extendido cuando se produce un error.

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 lo hubiera, 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 de destino. Una longitud de -1 para una variable de destino de tipo SRVCHAR o SRVBINARY indica que hay suficiente espacio disponible. Para una variable de destino de tipo srvchar, una longitud de -1 hace que la cadena de caracteres termine en NULL.

Devoluciones

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

Comentarios

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 del destino, o un subdesbordamiento si el número es menor que el valor mínimo del 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 un 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 valor destlen de -1, se agrega un terminador NULL a una cadena.

Para obtener una descripción de los tipos de datos y las conversiones de tipos de datos de la API de procedimiento de almacén extendido, consulte 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.

Importante

Debe revisar minuciosamente 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.

Consulte también

srv_setutype (API de procedimiento almacenado extendido)
srv_willconvert (API de procedimiento almacenado extendido)