[T-SQL]Une erreur de dépassement arithmétique [Résolu/Fermé]

Signaler
Messages postés
2
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
14 juin 2010
-
pinko_01
Messages postés
2
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
14 juin 2010
-
bonjour ,
je travaille avec les procédures stockée sur SQL server 2008 , mais quand je veux executer l'une de mes procedure ,il m'affiche l'erreur suivant :

Une erreur de dépassement arithmétique s'est produite lors de la conversion de expression en type de données int.

[CODE]
USE [Entreprise]
GO
/****** Object: StoredProcedure [dbo].[Cos_phi_calculé] Script Date: 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]


En effet j'ai une fonction qui s'appelle [dbo].[CosPhi_calcule] qui retourne une valeur de type float ,quand je veux le récupérer avec ma procédure stockée [dbo].[Cos_phi_calculé] il m'afficher l'erreur précédemment présenté.

[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]



dans les paramètre de ma procédure je trouve ca:

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

comme vous voyer ma procédure retourne toujours une valeur de type Integer ,et je pense que c'est la seul raison pour la quelle elle m'affiche le message de dépassement .

alors j'ai modifier le type de retour de ma fonction et j'ai mis Int au lieu de float pour que ma procédure puisse capturer la valeur de la fonction mais malheureusement en vain, elle m'affiche la même erreur.

j'ai aussi ce code la ,

[CODE]
USE [Entreprise]
GO

[B]DECLARE @return_value int[/B]

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

SELECT 'Return Value' = @return_value

GO

[/CODE]

la aussi j'ai remplacer Int par float pour remedier au probleme de conversion mais en vain ::cry:

Alors est ce qu'il y a un moyen pour modifier le type de retour de ma procédure ,le rendre float au lieu de int ,parce que INt est donné par default par SQL server

j'espère que j'ai bien expliqué mon problème et vos remarque seront les bienvenus

Merci d'avance :)

2 réponses

Salut,

Je connais pas les subtilités de SQL Server, mais la lecture de ton code m'a rappelé quelques souvenirs désagréables.
la fonction SQRT renvoyant un float, il était préférable de lui fournir des float.

J'aurais donc tendance à te conseiller d'explorer la voie :
* convertir explicitement tous les int en float
* détailler chaque calcul
* convertir le résultat final en int
Si tu arrives à cerner l'origine du bug, tu peux ensuite économiser des conversions et ne convertir que le passage sensible.
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 87786 internautes nous ont dit merci ce mois-ci

Messages postés
2
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
14 juin 2010

bonjour fiu,
merci pour ta reponce ,le probleme est resolu grace a cette phrase :
la fonction SQRT renvoyant un float, il était préférable de lui fournir des float.
Merci encore une fois :)