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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 !