La colonne qui intervient dans mon update est une valeur récupéré de mon curseur

Résolu
yann591 Messages postés 26 Date d'inscription dimanche 3 juin 2007 Statut Membre Dernière intervention 5 septembre 2008 - 19 août 2008 à 15:52
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 - 20 août 2008 à 21:46
Bonjour,

Voila je crée un procédure stockée qui me récupère plusieurs lignes
ensuite un curseur me fait allé de ligne en ligne
je fait un update sur chaque lecture
mais voila : la colonne(@champ) qui intervient dans mon update est une valeur récupéré de mon curseur et apparemment ça pose problème.

 CREATE PROCEDURE MAJ_UTILISATEUR
 
as
/*déclaration des variables de colonnes pour le curseur*/
DECLARE @l_employeeid varchar(50), @champ varchar(50), @modif varchar(50),@date_effet datetime

-- declaration du curseur
DECLARE MyCursor CURSOR
FOR
   SELECT l_employeeid,champs,modif,date_effet
   FROM utilisateur_temp

-- ouverture du curseur
OPEN MyCursor

-- lecture du premier enregistrement
FETCH MyCursor INTO @l_employeeid, @champ, @modif, @date_effet

-- boucle de traitement
WHILE @@fetch_Status = 0
BEGIN

UPDATE    utilisateur_dev
     SET         @champ= @modif     le probleme est ici avec la variable @champ qui n'est pas reconnu
     WHERE     employeeid = @l_employeeid

FETCH MyCursor INTO @l_employeeid, @champ, @modif,@date_effet
END

-- fermeture du curseur
CLOSE myCursor

-- libération de la mémoire
DEALLOCATE myCursor
GO

merci d'avance pour votre aide.

yann

4 réponses

crn_c21 Messages postés 302 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 4 février 2011
20 août 2008 à 08:56
set @SQL='UPDATE    utilisateur_dev
                 SET         '  + @champ +  '  =  ' ' ' + @modif  + ' ' '
                 WHERE     employeeid = ' ' ' + @l_employeeid + ' '

pardon pour la syntaxe!!
3
yann591 Messages postés 26 Date d'inscription dimanche 3 juin 2007 Statut Membre Dernière intervention 5 septembre 2008
20 août 2008 à 11:53
Un grand merci pour ton aide !!!

J'ai du retouché un peu mais tu m'a bien mis sur la bonne voie !!

declare @SQL varchar(100)


set @SQL='UPDATE    utilisateur SET   '   + @champ + '='+ '''' + @modif + '''' + ' WHERE     employeeid =' + '''' + @l_employeeid + ''''

ca marche, les quote c la galère lol

Encore merci.

yann
3
crn_c21 Messages postés 302 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 4 février 2011
20 août 2008 à 08:46
Il faut passer une commande SQL:

Declare @SQL varchar(100)

set @SQL='UPDATE    utilisateur_dev
                 SET         ' ' ' + @champ + ' ' '  =  ' ' ' + @modif  + ' ' '
                 WHERE     employeeid = ' ' ' + @l_employeeid + ''

exec (@SQL)
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
20 août 2008 à 21:46
Salut

Il est possible de faire des requetes plus propre avec
une ecriture du style

exec sp_executesql N'update dbo.matable set id=@id where id=10',N'@id varchar(255)',@id='toto'

Le profiler SQL de permet d'avoir ce type  de requete avec des requetes parametrées
ce qui evite les injections SQL et le fait su controle de type
0
Rejoignez-nous