[SQL2005] Problème sur un update
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:
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 |