Bonjour, voici ma fonction utilisateur :

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
 
CREATE FUNCTION F_COMPTER_HEURES (@ligne int)  
RETURNS float
 AS  
BEGIN
 
DECLARE @duree float;
DECLARE @debut DateTime,@fin DateTime;
 
-- declaration du curseur
DECLARE CursPlan CURSOR 
FOR 
	select DEBUT,FIN from PLANNING WHERE FK_LIGNE_CONTRAT=@ligne and PREVU=1
 
-- ouverture du curseur
OPEN CursPlan
 
-- lecture du premier enregistrement
FETCH CursPlan INTO @debut, @fin
 
-- boucle de traitement
WHILE @@fetch_Status = 0
	BEGIN
 
		set @duree = @duree + DATEDIFF(minute,@debut,@fin)
 
 
-- lecture de l'enregistrement suivant
  	 FETCH CursPlan INTO @debut, @fin
	END
 
-- fermeture du curseur
CLOSE  CursPlan
 
-- libération de la mémoire
DEALLOCATE  CursPlan
 
 
RETURN @duree
 
END
La valeur de retour est à NULL

J'appelle cette fonction depuis un trigger et ça doit mettre à jour un compteur d'heures...

Mon :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
DATEDIFF(minute,@debut,@fin)
calcule bien la différence en minutes...

Mais dans @duree, il n'y a visiblement rien...et dans la base, le champ à mettre à jour est à null.

J'ai fait le test de retourner DATEDIFF(minute,@debut,@fin)
ça marche parfaitement...

Avez vous une idée?