[Optimisation][Fonction]calcul du nombre de jours ...
Bonjour,
j'ai écrit une fonction qui vérifie si j'ai bien saisi quelque chose dans la base chaque jour entre une date de début et une date de fin.
Exemple : entre le 1 janvier 2002 et le 31 décembre 2002, je veux savoir si il y a au moins une ligne comptable saisie dans la base.
La fonction marche, mais si ma période de test est grande (1 année) la requête plante (normal puisque je fais des boucles sur la periode et je ramène des données, ...)
un peu de code est mieux qu'un long discours, je vous laisse découvrir ma fonction en espérant que vous pouvez m'aider pour l'optimiser :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| CREATE FUNCTION NombreJours (@Client CHAR(8),
@DateDebut Datetime,
@DateFin Datetime,
@Seuil MONEY)
RETURNS INT
AS
BEGIN
IF @Client IS NULL
RETURN NULL
DECLARE @NbJours INT
DECLARE @MaDate DATETIME
DECLARE @SoldeMouvement MONEY
SET @NbJours = 0
SET @MaDate = @DateDebut
'--initialisation comme paramètre
@SoldeMouvement =1000
'--je pense qu'il faut optimiser ici
WHILE @MaDate <= @DateFin
BEGIN
'-- j'incrémente la date
Select @MaDate = DateAdd(Day,1,@MaDate)
SELECT @SoldeMouvement =(SUM(MONTANT_EURO_SIGNE) )+@SoldeMouvement
FROM MOUVEMENT MVT, ECRITURE ECR
WHERE ECR.ID = MVT.ID
AND ECR.DATE_COMPTA<= @MaDate
AND MVT.COMPTE=@Client
GROUP BY MONTANT_EURO_SIGNE
IF @SoldeMouvement >= @Seuil
SET @NbJours = @Nbjours + 1
END
RETURN @NbJours
END |
Merci de votre aide !