Error de desbordamiento aritmético

Resuelto
pinko_01 Mensajes publicados 2 Fecha de registro   Estado Miembro Última intervención   -  
pinko_01 Mensajes publicados 2 Fecha de registro   Estado Miembro Última intervención   -
Bonjour, je travaille avec las procedimientos almacenados en SQL Server 2008, pero cuando intento ejecutar uno de mis procedimientos, me muestra el siguiente error :

Ha ocurrido un error de desbordamiento aritmético al convertir la expresión en el tipo de datos int.

[CODE]
USE [Entreprise]
GO
/****** Objeto: Procedimiento Almacenado [dbo].[Cos_phi_calculé] Fecha del Script: 06/12/2010 11:21:50 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Cos_phi_calculé]
AS
SELECT dbo.CosPhi_calcule(consomm_HC, consomm_HP, consomm_HN, consomm_energie_reactive)
FROM dbo.Facture
[/CODE]

De hecho, tengo una función llamada [dbo].[CosPhi_calcule] que devuelve un valor de tipo float, cuando quiero recuperarlo con mi procedimiento almacenado [dbo].[Cos_phi_calculé] me muestra el error mencionado anteriormente.

[CODE]

ALTER FUNCTION [dbo].[CosPhi_calcule]
(
@consomm_HC int,
@consomm_HP int,
@consomm_HN int,
@consoER int
)
RETURNS float
AS
BEGIN
DECLARE @resultat float

SET @resultat=(@consomm_HC+@consomm_HP+@consomm_HN)/(SQRT(((@consomm_HC+@consomm_HP+@consomm_HN)*(@consomm_HC+@consomm_HP+@consomm_HN)) + (@consoER * @consoER)))
RETURN @resultat
END

[/CODE]

En los parámetros de mi procedimiento, encuentro esto:

[IMG]http://www.easy-upload.net/fichier.php?fichier=2010612123640[/IMG]

Como pueden ver, mi procedimiento siempre devuelve un valor de tipo entero, y creo que esa es la única razón por la cual me muestra el mensaje de desbordamiento.

Entonces, he modificado el tipo de retorno de mi función y puse int en lugar de float para que mi procedimiento pudiera capturar el valor de la función, pero desgraciadamente en vano, me muestra el mismo error.

También tengo este código:

[CODE]
USE [Entreprise]
GO

[B]DECLARE @return_value int[/B]

EXEC @return_value = [dbo].[Cos_phi_calculé]

SELECT 'Valor de Retorno' = @return_value

GO
[/CODE]

Aquí también he reemplazado int por float para remediar el problema de conversión pero en vano ::cry:

Entonces, ¿hay alguna manera de modificar el tipo de retorno de mi procedimiento, haciéndolo float en lugar de int, porque int es dado por defecto por SQL Server?

Espero que he explicado bien mi problema y sus comentarios serán bienvenidos.

Gracias de antemano :)

2 respuestas

fiu
 
Hola,

No conozco las sutilezas de SQL Server, pero la lectura de tu código me recordó algunos recuerdos desagradables.
La función SQRT devuelve un float, por lo que era preferible proporcionarle floats.

Por lo tanto, tiendo a aconsejarte que explores la siguiente vía:
* convertir explícitamente todos los int a float
* detallar cada cálculo
* convertir el resultado final a int
Si logras identificar el origen del error, puedes economizar conversiones y convertir solo la parte sensible.
1