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 :
Merci de votre aide !
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
Partager