Bien le bonjour à toutes et à tous.

Je me retrouve à dérouiller mon Transact-SQL sur SQL Server, ce qui s'avère douloureux... (j'en étais resté au PL-SQL il y a bien longtemps)

Mon objectif c'est de parcourir une table (R_Hermes), et pour chaque ligne, trouver l'id correspondant à une description, qui se trouve dans une table tiers.

Je me heurte à deux questions de syntaxe (ou de logique ?) (j'ai mis le source complet en bas du post...) :

- dans une requête select, je ne parviens pas à utiliser une variable décrite plus haut :

WHERE desc_Charge_Affaire like @vchDescChargeAffaire

Il n'aime pas mon @vchDescChargeAffaire. Ca ressemble pourtant beaucoup aux exemples que j'ai pu trouver... Là je sèche. J'ai droit à un message royal de détails :
Msg 102, Level 15, State 1, Line 27
Syntaxe incorrecte vers '@vchDescChargeAffaire'.


- Pour la mise à jour dans ma table de départ, j'ai tenté divers méthode, j'ai crû comprendre dans mes recherches que la seule bonne méthode était de créer une chaine de caractères de ma requête et de faire un exec :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
set @Query = 'UPDATE dbo.R_Hermes SET id_Charge_Affaire = ' + @iIdChargeAffaire + 'WHERE CURRENT OF Repository;'
exec (@query)
Il me déclare que la variable scalaire Query doit être déclarée. Là, j'ai repris un exemple glané, je comprends pas non plus.
J'ai tenté divers combinaison, des incantations, à part une formation SQL server je ne vois plus de pistes...

Voici le détail de mon "oeuvre", et merci d'avance pour toute aide potentielle ou soutien moral. Si à défaut, vous avez un job vacant de ceuilleur de fruits dans le sud, çà me va aussi. Faut pas s'acharner, l'informatique ne veux pas (plus) de moi. L'assembleur me manque, dés qu'une syntaxe dépasse les 6 caratères par ligne, je suis plus...

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
------------
 
SET NOCOUNT ON
 
-- déclaration des variables
DECLARE  
         @iIdChargeAffaire            int,
         @vchDescChargeAffaire        nvarchar(100),
         @Query                        varchar(500)
 
-- déclaration du curseur
DECLARE Repository CURSOR FOR 
SELECT   
          desc_Charge_Affaire
FROM      dbo.R_Hermes
FOR UPDATE
 
OPEN Repository
 
FETCH Repository INTO @vchDescChargeAffaire
 
-- Traitement pour chaque ligne
WHILE @@Fetch_Status = 0
   BEGIN
 
-- Recherche de l'id
   SELECT @iIdChargeAffaire = id_Charge_Affaire 
   FROM dbo.T_Charge_Affaire
   WHERE desc_Charge_Affaire LIKE @vchDescChargeAffaire
   GO
 
 -- Mise à jour de l'id
   set @Query = 'UPDATE dbo.R_Hermes SET id_Charge_Affaire = ' + @iIdChargeAffaire + 'WHERE CURRENT OF Repository;'
   exec (@query)
 
      FETCH Repository INTO @vchDescChargeAffaire
   END
 
CLOSE Repository
DEALLOCATE Repository
RETURN