CORRECÇÃO: Dados inválidos de float podem levar à flutuante ponto Exception e valores incorretos armazenados

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 291561
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Erro nº: 101307 (sqlbug_70)
Sintomas
Quando a expressão 0/0 (zero dividido por zero) é passada para o SQL Server como um flutuante aponte valor para um parâmetro de procedimento armazenado, uma mensagem de erro EXCEPTION_INVALID_FLT_OPERATION pode ocorrer. Execuções subseqüentes do procedimento armazenado enquanto o procedimento plano está em cache podem levar a valores incorretos para o parâmetro. Se você usar o valor do parâmetro para armazenar dados para a coluna de uma tabela, os dados podem ser armazenados incorretamente.
Resolução
Para resolver esse problema, obtenha o service pack mais recente para o Microsoft SQL Server 7.0. Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
301511INF: Como obter o Service Pack mais recente do SQL Server 7.0
Observação : O seguinte hotfix foi criada antes do Microsoft SQL Server 7.0 Service Pack 4.

A versão em inglês dessa correção deve ter os seguintes atributos de arquivo ou posteriores:
   Version      File name    Platform   ----------------------------------   7.00.982     s70982i.exe  Intel                s70982a.exe  Alpha				
Observação : devido a dependências do arquivo, o hotfix mais recente ou o recurso que contém os arquivos anteriores pode também conter arquivos adicionais.

Como Contornar
Para contornar esse problema, insira o código em seu aplicativo para evitar a ligação de um valor de 0/0 como um flutuante valor de ponto.

Além disso, execuções subseqüentes do procedimento só criar problemas para dados incorretos se você usar o mesmo plano de execução para o procedimento depois que a exceção ocorre. Portanto, se você criar o procedimento usando a opção WITH RECOMPILAR, você pode evitar o problema porque um plano deve ser compilado para cada execução do procedimento.
Situação
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no começo deste artigo. Esse problema foi corrigido primeiro no Microsoft SQL Server 7.0 Service Pack 4.
Mais Informações
Se o parâmetro do procedimento é usado por uma instrução INSERT dentro do procedimento, os valores armazenados na tabela a podem estar incorretos mesmo quando passar valores de ponto flutuante válido depois que a exceção ocorre. Por exemplo, se a exceção ocorre o valor de 1.0 subseqüente pode ficar armazenado como 0.00000001

Esse problema ocorre somente se ponto flutuante o valor é acoplado a um parâmetro de procedimento armazenado por um aplicativo usando chamadas de procedimento remoto nativas SQL Server (RPC). Esse problema não ocorre se você executar o procedimento como um lote com Transact-SQL porque o analisador do SQL Server captura o valor de ponto flutuante incorreto. Nesse caso, a seguinte mensagem de erro ocorre:
Msg 8134
Divisão por zero erro
A mensagem de erro EXCEPTION_INVALID_FLT_OPERATION ocorre apenas se SQL Server deve executar algum tipo de operação em relação à inválido expressão de ponto flutuante, como uma conversão. Portanto, se o procedimento armazenado é definido para aceitar um valor NUMERIC mas o aplicativo vincula a expressão 0/0 como um valor FLOAT, a exceção pode ocorrer.

Se o parâmetro SQL RPC está definido para aceitar um FLOAT e a expressão inválida 0/0 é passado para o servidor como FLOAT, uma exceção pode não ocorrer, embora um valor flutuante incorreto pode ser usado pelo procedimento. Se o valor do parâmetro é armazenado em uma tabela com uma instrução INSERT, uma tentativa de recuperar esses dados pode resultar em uma mensagem de erro similar à:
Valor numérico fora do intervalo
Esse problema não ocorre no Microsoft SQL Server 2000. Em um servidor SQL Server 2000, a seguinte mensagem de erro é relatada ao tentar converter uma expressão de ponto flutuante inválida de 0/0 em um parâmetro numérico:
Msg 3628
A exceção no processo de usuário de ponto flutuante. Transação atual será cancelada

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 291561 - Última Revisão: 12/06/2015 01:14:18 - Revisão: 1.0

Microsoft SQL Server 7.0 Standard Edition

  • kbnosurvey kbarchive kbmt kbbug kbfix KB291561 KbMtpt
Comentários