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 :

Procedure avec INSERT et champ variable


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 7
    Par défaut Procedure avec INSERT et champ variable
    Bonjour à tous,

    J'ai un petit problème dans une de mes procédures
    Elle insère une ligne mais les champ de l'insert sont variables.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    DECLARE @field1 VHARCHAR(5)
    DECLARE @field2 VHARCHAR(5)
    SET @field1 = 'day1'
    SET @field2 = 'day5'
     
    INSERT INTO MATABLE ( ID, [@field1], [@field2])
    VALUES (5, @var1, @var2)
     
    -- @var1 et @var2 sont envoyés à ma procedure
    -- et @field1 et @field2 sont variables
    la suite de mon code effectue également un UPDATE avec le meme principe

    SAUF que sql server n'aime pas du tout la syntaxe
    "Invalid colum name '@field1'"

    J'utilise sql 2005

    Merci de votre aide

    @ bientot

  2. #2
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Essaie quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DECLARE @field1 VHARCHAR(5)
    DECLARE @field2 VHARCHAR(5)
    DECLARE @query VARCHAR(255)
     
    SET @field1 = 'day1'
    SET @field2 = 'day5'
    SET @query = 'INSERT INTO MATABLE (ID, ' + @field1 + ', ' + @field2 + ')
    VALUES (5, ' + @var1 + ','  + @var2 + ')'
     
    EXEC(@query)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 7
    Par défaut
    merci pour ta réponse

    elle fonctionne et c'est ce que j'utilisais avant, mon probleme c'est que je ne veux pas utiliser EXEC pour ne pas à refaire travailler le parseur sql. en utilisant EXEC je perd toute l'optimisation d'une procedure et donc autant utiliser un script client pour effectuer cette requete...

    j'espere qu'il y a solution a mon problème ...

  4. #4
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par bbshadoks
    merci pour ta réponse

    elle fonctionne et c'est ce que j'utilisais avant, mon probleme c'est que je ne veux pas utiliser EXEC pour ne pas à refaire travailler le parseur sql. en utilisant EXEC je perd toute l'optimisation d'une procedure et donc autant utiliser un script client pour effectuer cette requete...

    j'espere qu'il y a solution a mon problème ...
    Ca m'étonnerait vraiment que tu aies le choix...

    L'avantage d'une procédure stockée, c'est qu'elle est déja compilée, mais si tu commences à faire des requêtes dynamiques, tu ne peut pas les compiler à l'avance, ce qui t'oblige à compiler ta requête même à l'intérieur de la procédure stockée...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 7
    Par défaut
    ben l'autre pb c'est que @var1 et @var2 sont des entiers, donc je suis obligé de faire des CAST à chaque fois.
    et j'ai environ 15 valeurs à insérer (dont les 2 champs variables @field1 et field2).

    je trouve ca bizare que l'on ne puisse pas mettre des champs en variable comme les noms de table par exemple. car là mes performances vont en patir !!!

    15 CAST + re parser la requete => pas cool ...

  6. #6
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par bbshadoks
    je trouve ca bizare que l'on ne puisse pas mettre des champs en variable comme les noms de table par exemple. car là mes performances vont en patir !!!
    Le problème, c'est qu'avec une telle requête, tu peut rien compiler à l'avance puisque tu ne sais son contenu que lors de l'éxécution de la procédure stockée, or, toute requête doit être compilée, on ne peut donc la compiler que quand on sait ce qu'elle va contenir.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 7
    Par défaut
    hum ok je comprend... je vais donc garder mes EXEC.
    merci bien wich !

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

Discussions similaires

  1. Requête avec nom de champ variable
    Par JP.NUAGE dans le forum SQL
    Réponses: 2
    Dernier message: 02/03/2010, 17h52
  2. Pb : requete avec nom de champ variable renvoie le nom du champ
    Par Illecebrum dans le forum Développement
    Réponses: 3
    Dernier message: 08/12/2008, 19h17
  3. Formulaire avec nombre de champ variable
    Par david87 dans le forum IHM
    Réponses: 0
    Dernier message: 21/04/2008, 10h16
  4. Requete paramétrée avec nombre de champs variable
    Par Braillane dans le forum Accès aux données
    Réponses: 3
    Dernier message: 07/02/2008, 23h09
  5. Requête avec nom de champ "variable"
    Par Pgs dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/07/2007, 10h25

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