Posez votre question Signaler

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

pinko_01 2Messages postés 23 octobre 2006Date d'inscription 14 juin 2010Dernière intervention - Dernière réponse le 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 :)
Lire la suite 

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

2 réponses
Réponse
+1
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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 :)
Ajouter un commentaire
Ce document intitulé « [T-SQL]Une erreur de dépassement arithmétique » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?