Bonjour,

J'ai un souci lors d'un update. Cette procédure est appelé depuis un webService en C#. Des dizaines d'autres procédures sont appelées dans le programme, dans des contextes parfois similaires, et fonctionnent.
Dans la procédure, un select de la variable @qte ou de la variable @paPondere renverra le bon résultat.
Le dernier Select de la procédure renvoie le bon résultat. Pourtant, lorsque je fais ce même select depuis une requête directe du SQL Mangement Studio, ou que j'essaie de récupérer la valeur de PaPondere dans le Service, le Pa pondéré n'a pas été mis à jour. La table n'a pas été updatée.
Ce n'est apparemment pas un problème de cache, puisqu'on n'a pas "un coup d'avance", la valeur ne bouge pas du tout.
J'ai essayé d'exécuter le contenu de la procédure avec un tphaRefID en "dur" depuis une requête dans le Management Studio, et la tout fonctionne normalement.

Avec des collègues, nous avons essayé beaucoup de choses: transaction, forcer un commit, try/catch...
Le paramètre @tphaRefID passé est le bon.
Même si on change @paPondere par un chiffre en dur dans l'update, l'update ne se fait pas.
Si on fait l'update sur une autre colonne de la table, cela ne fonctionne pas non plus.
Aucun message d'erreur n'est renvoyé.

N'hésitez pas à me demander d'autres précisions!

Edition: ajout des préfixes.

La procédure en question:

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
ALTER PROCEDURE [dbo].[uspListeReferencesUpdatePaPondere]
	@tphaRefID int
AS
BEGIN
	SET NOCOUNT ON;
 
 
 
	DECLARE @qte int
	DECLARE @paPondere decimal
 
	SELECT @qte = (SUM(QteHomogene) + SUM(QteStd00) + SUM(QteStd81) + SUM(QteStd82) + SUM(QteStd83))
	FROM          [dbo].TPHA_CDETAILLE
	INNER JOIN [dbo].TPHA_CDE ON [dbo].TPHA_CDE.TphaCdeID = [dbo].TPHA_CDETAILLE.TphaCdeID
	WHERE TphaRefID = @tphaRefID
		 AND ISNULL((QteSuisse + QteEspagne + QteFranchises) * 100 / NULLIF
                          (@qte, 0), 0)  < 100
		 AND DateAnnulation IS NULL
 
 
 
 
	SELECT 
	@paPondere =
	(SUM(Qte*PrixAchat) / NULLIF(@qte,0)) 
	FROM [dbo].vListeCommandes 
	WHERE TphaRefID = @tpharefID AND PctInternational < 100 
	AND DateAnnulation IS NULL
 
 
	UPDATE [dbo].TPHA_REF
	SET 
		PaPondere = @paPondere
	WHERE TphaRefID = @tphaRefID
 
END