Bonjour,
Voilà tous les soirs j'ai une très grosse table que je vide et mets à jour avec les données de production.
Ca prend un certains temps et j'essaie de mettre en place plusieurs optimisation en //

Cependant le principe est le suivant
1 - INSERT INTO TblToUpdate (...) SELECT (...) FROM TblSelect
2 - Plusieurs UPDATE TblToUpdate SET Chps = ...

La raison des plusiers requêtes UPDATE est que les champs sont calculés par CASE WHEN successive. Si je fais tout ça dans la même requête UPDATE je me retrouve avec une truc du genre SET Chps = CASE WHEN CASE WHEN CASE WHEN...Bref illisible et difficile à écrire sans faute.

J'ai trouvé un truc sur Google que j'ai testé qui marche pas mal
On peut faire un truc du genre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
UPDATE TblToUpdate SET @Chps1 = Chps1 = CASE WHEN ... END, Chps2 = @Chps1 + CASE WHEN ... END
Je l'ai testé et ça ça marche bien.

Du coup pour encore gagner du temps, je m'étais proposé de tout faire dans la requête INSERT INTO et j'ai essayé un truc du genre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
INSERT INTO TblToUpdate (Chp1, Chp2)
SELECT @Chps1 = CASE WHEN ... END, @Chps2 = @Chps1 + CASE WHEN ... END FROM TblSelect
Et là j'ai le message :
Une instruction INSERT ne peut contenir d'instruction SELECT affectant des valeurs à une variable.
J'en déduis que ce n'est pas possible dans une requête INSERT INTO.

Du coup j'ai pensé à la clause WITH et les jeux nommées dans la requête

Mais je ne suis pas sur de gagner en temps.