Merci pour ta réponse elsuket ! et désolé de n'avoir été assez précis.
J'utilise SQL 2005 et ma procédure ressemble à ça :
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
| ALTER PROCEDURE SetApplication
(
@idApplication int = null,
@idStatut int,
...
...
)
IF EXISTS (SELECT * FROM Application WHERE idApplication = @idApplication)
BEGIN
UPDATE Application
SET
idStatut = @idStatut,
...
WHERE idApplication = @idApplication
END
ELSE IF NOT EXISTS(SELECT * FROM Application WHERE idApplication = @idApplication)
BEGIN
INSERT INTO(
idStatut,
...
)
VALUES(
@idStatut,
...
)
END
ELSE
RETURN -1 |
Donc en gros je vais devoir utiliser ceci :
1 2 3 4 5 6 7 8 9 10 11
| ;WITH
CTE AS
(
SELECT idApplication
, MAX(DateMAJ) AS last_DateMAJ
FROM dbo.MAJ
)
UPDATE dbo.Application
SET DerniereVersion = C.last_DateMAJ
FROM dbo.Application AS A
INNER JOIN CTE AS C ON A.idApplication = C.idApplication |
Par contre je ne comprends pas la syntaxe du ;WITH et le CTE AS ?
Aussi, je ne saisie pas le
INNER JOIN CTE AS C ON A.idApplication = C.idApplication
Et la fonction MAX(DateMAJ) existe déjà ?
Aussi, pour le bout de code :
1 2 3
| SELECT idApplication
, MAX(DateMAJ) AS last_DateMAJ
FROM dbo.MAJ |
il ne faut pas rajouter quelque chose pour dire que le MAX(DateMAJ) doit se faire sur les MAJ qui sont spécifiques à un idAppplication ?
Parce qu'avant dfe faire le INNER JOIN sinon, on a dans CTE les idApplication et le Max de toutes les mises à jours donc dans la colone des max il y aura la même valeur pour tous les idApplications (cette valeur sera le max de toutes les MAJ de toutes les applications) non?
Merci encore !
Partager