IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Erreur de conversion et requête dynamique dans une procédure


Sujet :

MS SQL Server

  1. #1
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut Erreur de conversion et requête dynamique dans une procédure
    Salut (bis),

    Décidément je ne comprends pas ce que j'ai avec les conversions aujourd'hui!

    Dans une procédure stockée j'essaye de faire une requête dynamique mais une colonne me pose problème.
    Essai 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    set @cmd = 'update ' + @table_generique + ' set '
    		+ 'COL_PB = ''' + @var1 + ''''
    		+ ', COL_1 = ''' + @arg1 + ''''
    		+ ', COL_2 = ''' + @arg2 + ''''
    		+ ', COL_3 = ''' + @arg3 + ''''
    	+ ' where ' + @colonne_generique + ' = ' + @code_generique
     
    /*exec(@cmd)*/
     
    select RETOUR = @var1
    Serveur : Msg 245, Niveau 16, État 1, Procédure maProc, Ligne 173
    Erreur de syntaxe lors de la conversion de la valeur varchar 'update TABLE_1 set COL_PB = '' vers une colonne de type de données int.
    Essai 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    set @cmd = 'update ' + @table_generique + ' set '
    		+ 'COL_1 = ''' + @arg1 + ''''
    		+ ', COL_2 = ''' + @arg2 + ''''
    		+ ', COL_3 = ''' + @arg3 + ''''
    		+ ', COL_PB = ''' + @var1 + ''''
    	+ ' where ' + @colonne_generique + ' = ' + @code_generique
     
    /*exec(@cmd)*/
     
    select RETOUR = @var1
    Serveur : Msg 245, Niveau 16, État 1, Procédure maProc, Ligne 173
    Erreur de syntaxe lors de la conversion de la valeur varchar 'update TABLE_1 set COL_1 = ' ', COL_2 = 'test à valider', COL_3 = ' ', COL_PB = '' vers une colonne de type de données int.
    Tout ça pour montrer que le problème se situe sur la colonne COL_PB.
    Ce qui est noté argX est un paramêtre passé à l'appel de la procédure stockée, var1 est une variable déclarée dans la procédure stockée.
    Ce qui est étrange c'est que l'erreur intervient dans les deux cas même sans exécuter la requête dynamiqueSi je mets toute la requête en commentaire j'ai bien un RETOUR montrant que @var1 est correct.
    La base de données a une compatibilité 6.5 (au cas où ça jouerait!)

    Voyez-vous ce qui ne va pas?

    Merci par avance.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  2. #2
    Membre éprouvé
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 274
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 274
    Points : 1 280
    Points
    1 280
    Par défaut
    dans essai 1, tu as pas un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DECLARE @var1 as integer
    ou
    avant le AS ???

    Si c'est le cas declare le en varchar(50) et essaye pour voir, il me semble que j'ai deja eu le pb.
    j'suis vert !

  3. #3
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    En fait c'est @var1 qui pose problème. Appremment si je mets une paramètre ou une chaîne texte en dur l'erreur ne se produit plus. Par contre, si j'utilise une variable ça plante.
    La variable est pourtant déclarée en int :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    declare	@var1	int,
    	@cmd		varchar(500)
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  4. #4
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Merci HULK, je prenais le problème à l'envers! Pour moi c'était normal que @var1 soit un entier, seulement je fais une concaténation de chaînes de caractères.

    Bien joué, encore merci.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. centrage dynamique dans une procédure
    Par JYH dans le forum Composants VCL
    Réponses: 4
    Dernier message: 15/08/2013, 09h58
  2. [Dates] injecter une variable dynamique dans une requête
    Par omar071286 dans le forum Langage
    Réponses: 3
    Dernier message: 20/04/2008, 09h51
  3. Réponses: 4
    Dernier message: 01/01/2007, 10h26
  4. [ODBC] Afficher une requête croisée dynamique dans une page PHP
    Par resterzen dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/08/2006, 16h24
  5. SQL dynamique dans une procédure stockée
    Par Amnesiak dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/07/2005, 15h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo