REVISIÓN: Datos de float no válidos pueden conducir a una excepción de punto flotante y a valores incorrectos almacenados

Seleccione idioma Seleccione idioma
Id. de artículo: 291561 - Ver los productos a los que se aplica este artículo
Error nº: 101307 (sqlbug_70)
Expandir todo | Contraer todo

Síntomas

Cuando se pasa la expresión 0/0 (cero dividido por cero) a SQL Server en forma flotante seleccione valor para un parámetro de procedimiento almacenado, puede producirse un mensaje de error EXCEPTION_INVALID_FLT_OPERATION. Las ejecuciones posteriores del procedimiento almacenado mientras el plan de procedimiento está en caché pueden conducir a valores incorrectos para el parámetro. Si utiliza el valor del parámetro para almacenar datos en la columna de una tabla, los datos pueden almacenarse incorrectamente.

Solución

Para resolver este problema, obtenga el service pack más reciente para Microsoft SQL Server 7.0. Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
301511INF: Cómo obtener el Service Pack más reciente de SQL Server 7.0
Nota : se creó la siguiente revisión antes de SQL Server 7.0 Service Pack 4.

La versión en inglés de esta revisión debe tener los atributos de archivo siguientes o posteriores:

   Version      File name    Platform
   ----------------------------------

   7.00.982     s70982i.exe  Intel
                s70982a.exe  Alpha
				
Nota : debido a la interdependencia entre archivos, el más reciente revisión o característica que contiene los archivos anteriores quizás contenga también archivos adicionales.

Solución

Para evitar este problema, insertar código en la aplicación para evitar enlazar un valor de 0/0 un flotante como valor de punto.

Además, las ejecuciones posteriores del procedimiento sólo crear problemas de datos incorrectos si utiliza el mismo plan de ejecución para el procedimiento después de que se produce la excepción. Por lo tanto, si crea el procedimiento mediante la opción WITH RECOMPILE, puede evitar el problema ya que se debe compilar un plan para cada ejecución del procedimiento.

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:" de este artículo. Este problema se corrigió por primera vez en Pack 4 de Microsoft SQL Server 7.0.

Más información

Si el parámetro del procedimiento se utiliza una instrucción INSERT dentro del procedimiento, los valores almacenados en la tabla es incorrectos incluso al pasar valores de punto flotante válido después de producirse la excepción. Por ejemplo, si se produce la excepción valor subsiguiente de 1.0 puede almacenarse como 0.00000001

Este problema sólo se produce si punto el flotante valor está enlazado a un parámetro de procedimiento almacenado de una aplicación mediante llamadas a procedimiento remoto de SQL Server nativos (RPC). Este problema no se produce si ejecuta el procedimiento como un lote con Transact-SQL porque el Analizador de SQL Server detecta el valor de punto flotante incorrecto. En este caso, se produce la mensaje de error siguientes:
Msg 8134
Dividir por cero error
El mensaje de error EXCEPTION_INVALID_FLT_OPERATION sólo se produce si SQL Server debe realizar algún tipo de operación de la expresión de punto flotante no válida, como una conversión. Por lo tanto, si el procedimiento almacenado no está definido para aceptar un valor NUMERIC pero la aplicación enlaza la expresión 0/0 como un valor FLOAT, puede producir la excepción.

Si el parámetro de RPC de SQL está definido para aceptar un FLOAT y la expresión 0/0 no válida se pasa al servidor como FLOAT, no puede producir una excepción, aunque puede utilizarse un valor float incorrecta por el procedimiento. Si el valor del parámetro se almacena en una tabla con una instrucción INSERT, intentó recuperar esta información puede aparecer un mensaje de error similar para:
Valor numérico fuera de intervalo
Este problema no se produce en Microsoft SQL Server 2000. En un servidor SQL Server 2000, se notifica el mensaje de error siguiente cuando intenta convertir una expresión de punto flotante no válido de 0/0 en un parámetro numérico:
Msg 3628
UNA excepción en el proceso de usuario de punto flotante. Se cancela la transacción actual

Propiedades

Id. de artículo: 291561 - Última revisión: martes, 15 de octubre de 2002 - Versión: 1.0
La información de este artículo se refiere a:
  • Microsoft SQL Server 7.0 Standard Edition
Palabras clave: 
kbmt kbbug kbfix KB291561 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 291561

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com