srv_convert (API de Procedimentos Armazenados Estendidos)

Aplica-se a: SQL Server

Importante

Esse recurso será removido em uma versão futura do SQL Server. Evite usar esse recurso em novos trabalhos de desenvolvimento e planeje modificar aplicativos que atualmente usam esse recurso. Usa antes a integração CLR.

Altera dados de um tipo de dado para outro.

Syntax

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

Arguments

srvproc
É um apontador para a estrutura SRV_PROC que é o handler para uma ligação cliente particular. A estrutura contém toda a informação de controlo que a API de Procedimentos Armazenados Estendidos utiliza para gerir comunicações e dados entre a aplicação e o cliente. Se o handle srvproc for fornecido, ele é passado para a função handler de erros da API de Procedimentos Armazenados Estendidos quando ocorre um erro.

srctype
Especifica o tipo de dado dos dados a converter. Este parâmetro pode ser qualquer um dos tipos de dados da API do Procedimento de Armazenamento Estendido.

SRC
É um apontador para os dados a converter. Este parâmetro pode ser qualquer um dos tipos de dados da API do Procedimento de Armazenamento Estendido.

srclen
Especifica o comprimento, em bytes, dos dados a converter. Se srclen for 0, srv_convert coloca um valor nulo na variável de destino. A menos que seja 0, este parâmetro é ignorado para tipos de dados de comprimento fixo, caso em que os dados fonte são assumidos como NULL. Para dados do tipo de dados SRVCHAR, um comprimento de -1 indica que a cadeia está terminada por nulo.

desttype
Especifica o tipo de dado para converter a fonte. Este parâmetro pode ser qualquer um dos tipos de dados da API do Procedimento de Armazenamento Estendido.

dest
É um ponteiro para a variável de destino que recebe dados convertidos. Se este ponteiro for NULL, srv_convert chama o manipulador de erros fornecido pelo utilizador, se existir, e retorna -1.

Se o desttype for SRVDECIMAL ou SRVNUMERIC, o parâmetro dest deve ser um apontador para uma estrutura DBNUMERIC ou DBDECIMAL com os campos de precisão e escala da estrutura já definidos para os valores desejados. Pode usar DEFAULTPRECISION para especificar uma precisão padrão, e DEFAULTSCALE para especificar uma escala padrão.

Destlen
Especifica o comprimento, em bytes, da variável de destino. Este parâmetro é ignorado para tipos de dados de comprimento fixo. Para uma variável de destino do tipo SRVCHAR, o valor de destlen deve ser o comprimento total do espaço de buffer de destino. Um comprimento de -1 para uma variável de destino do tipo SRVCHAR ou SRVBINARY indica que há espaço suficiente disponível. Para uma variável de destino do tipo srvchar, um comprimento de -1 faz com que a cadeia de caracteres seja terminada por nulo.

Devoluções

O comprimento dos dados convertidos, em bytes, se a conversão do tipo de dado for bem-sucedida. Quando srv_convert encontra um pedido de conversão que não suporta, chama o manipulador de erros fornecido pelo programador, se existir, define um número global de erro e retorna -1.

Observações

A função srv_willconvert determina se uma conversão específica é permitida.

Converter para os tipos de dados numéricos aproximados SRVFLT4 ou SRVFLT8 pode resultar em alguma perda de precisão. Converter dos tipos de dados numéricos aproximados SRVFLT4 ou SRVFLT8 para SRVCHAR ou SRVTEXT também pode resultar em alguma perda de precisão.

Converter para SRVFLTx, SRVINTx, SRVMONEY, SRVMONEY4, SRVDECIMAL ou SRVNUMERIC pode resultar em overflow se o número for maior do que o valor máximo do destino, ou em underflow se o número for menor do que o valor mínimo do destino. Se ocorrer overflow ao converter para SRVCHAR ou SRVTEXT, o primeiro carácter do valor resultante contém um asterisco (*) para indicar o erro.

Ao converter SRVCHAR para SRVBINARY, srv_convert interpreta SRVCHAR como hexadecimal, quer a cadeia contenha ou não um 0 inicial. Ao converter SRVBINARY para SRVCHAR, srv_convert cria uma cadeia hexadecimal sem zero inicial. Em todos os outros casos, uma conversão para ou a partir do tipo de dados SRVBINARY é uma cópia de bits direta.

Em certos casos, pode ser útil converter um tipo de dado para si próprio. Por exemplo, converter SRVCHAR em SRVCHAR com um desestlen de -1 adiciona um terminador nulo a uma cadeia.

Para uma descrição dos tipos de dados e das conversões de tipos de dados da API de Procedimentos de Armazenamento Estendidos, consulte Tipos de Dados (API de Procedimentos Armazenados Estendidos).

A função srv_convert pode falhar por várias razões:

  • A conversão solicitada não está disponível.

  • A conversão resultou em truncamento, transbordamento ou perda de precisão na variável de destino.

  • Ocorreu um erro de sintaxe ao converter uma cadeia de caracteres para um tipo de dado numérico.

Importante

Deves rever cuidadosamente o código-fonte dos procedimentos armazenados estendidos e deves testar as DLLs compiladas antes de as instalares num servidor de produção. Para informações sobre revisão e testes de segurança, consulte este site da Microsoft.