[T-SQL]Une erreur de dépassement arithmétique

Résolu/Fermé
pinko_01 Messages postés 2 Date d'inscription lundi 23 octobre 2006 Statut Membre Dernière intervention 14 juin 2010 - 12 juin 2010 à 13:27
pinko_01 Messages postés 2 Date d'inscription lundi 23 octobre 2006 Statut Membre Dernière intervention 14 juin 2010 - 14 juin 2010 à 01:19
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 :)
A voir également:

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