[SQL2008][TSQL] - Utilisation des variables dans des requêtes Transact-SQL
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:
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... :cry:
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:
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 |