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 :
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.
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)
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
Partager