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 :

Requete SQL avec variable


Sujet :

MS SQL Server

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Par défaut Requete SQL avec variable
    Bonjour,
    J'écris une requete sql (enfin j'essaie) et je trouve pas la réponse à mon problème.
    Je m'en retourne donc vers vous.

    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
     
    DECLARE @Champ nvarchar(50)
    DECLARE @MYVAL nvarchar(250)
     
    WHILE @i < 168
    BEGIN
    SELECT @Champ = COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'MATABLE' AND ORDINAL_POSITION = @i
    -- @Champ contient la nom de ma colonne "COLONE1"
    SET @MYVAL = (SELECT @Champ FROM INSERTED)
    -- @MYVAL contient le nom de ma colonne "COLONE1"
    SET @MYVAL = (SELECT COLONE1 FROM INSERTED)
    -- @MYVAL contient la valeur de ma colonne "VALEUR1"
    ...
    ...
    ..
    END
    Je ne comprend pas quelle est vraiment la différence. Et comment faire pour récupérer la valeur de la colonne en passant dans le select ma variable.

    Merci de votre aide

    P.S : désolé si le sujet à déja été traité mais je n'ai pas réussi à mettre la main sur ce que je veux.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Il faut le faire en deux temps, d'abord construire la requête en chaîne de caractères à coup de concaténation, puis l'exécuter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT @SQL = 'SELECT ' + COLUMN_NAME + ' FROM INSERTED'
      FROM INFORMATION_SCHEMA.COLUMNS
     WHERE table_name = 'MATABLE'
       AND ORDINAL_POSITION = @i;
     
    PRINT @SQL;

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Par défaut
    Bonjour,
    Merci de ta réponse.

    J'ai éxécuté ta requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT @Champ = 'SELECT ' + COLUMN_NAME + ' FROM INSERTED' 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE table_name = 'MATABLE' AND ORDINAL_POSITION = @i
     
    SET @MYVAL = (SELECT @Champ FROM INSERTED)
    Je me retrouve toujours avec la même chose dans @MyVal et dans @Champ et non valeur de ma colone.

    Peut etre n'ai je pas compris ce que tu voulais m'expliquer..

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Par défaut
    Pardon j'ai Essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT @MYVAL = @Champ
    Et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET @MYVAL = (SELECT @Champ)
    Car dans @ champ j'ai "SELECT COLUMN_NAME FROM INSERTED"

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Plutôt comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT @SQL = 'SELECT @MYVAL = ' + COLUMN_NAME + ' FROM INSERTED'
      FROM INFORMATION_SCHEMA.COLUMNS
     WHERE table_name = 'MATABLE'
       AND ORDINAL_POSITION = @i;
     
    PRINT @SQL;
    EXEC @SQL;
    PRINT @MYVAL;

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Par défaut
    Pardon je suis un peu lourd mais j'aimerais un complément d'info avant de tester.
    Tu EXEC @SQL (@Champ pour moi). Je comprend

    Mais ensuite tu Print @MyVal mais tu n'as rien mis dedans ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Par défaut
    EXEC @SQL m'emmene dans le catch.

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Oui, mais j'essaie juste de vous donner l'idée de passer par une chaîne SQL à construire et à exécuter.

    Effectivement, @SQL ne fonctionnera que si vous la pseudo table INSERTED existe, donc déjà il faut être dans un trigger.

    Mais je vous laisse gérer les subtilités de la demande.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Par défaut
    Oui oui je me doute que vous m'apportez votre aide et non une solution implacable et c'est très gentil de votre part.

    Je suis bien dans un trigger et les tables inserted et deleted existe.

    Enfait ce que j'aimerais c'est récupérer le nom de chaque colone de MATABLE avec l'incrément de @i (ce que je suis donc parvenu a faire) pour ensuite comparer dans mes tables inserted et deleted les valeurs de la même colone afin de voir si il y'a modification et créer une requete.

    Le but final est de récupérer l'ensemble des requetes pour les jouer ailleurs.

    Si je veux récupérer le nom de la colonne c'est pour ne pas avoir à ecrire chaque select en dur (168 colonnes..)

    Ce que je ne comprend pas c'est pourquoi je ne pas pas exploiter la valeur qui se trouve dans ma variable et que :

    MaVariable = colone 1

    SELECT MaVariable FROM Inserted
    ne fait pas la meme chose que
    SELECT colone 1 FROM Inserted

  10. #10
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    En fait la valeur que vous récupérer dans information_schema est une chaîne de caractères.

    Quand vous attribuez le nom de la colonne avec SELECT @Champ = COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS..., votre variable @Champ ne vaut pas colonne1 mais 'colonne1'.
    C'est simplement une valeur.

    Vous pouvez par contre la concaténer dans une autre requête qu'il faut alors exécuter.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Par défaut
    D'accord.
    Donc enfait il faudrait que je le définisse comme étant un nom de colonne et non une string ?
    Lui faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Set @Champ = ' " ' + @Champ + ' " '
    Ne suffira pas d'après mes test. Je ne vois pas comment définir une string comme étant une Colonne.

  12. #12
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Il manque les parenthèses dans le code de Waldar : EXEC @sql doit en fait être EXEC (@sql).

    En voyant la boucle WHILE dans le trigger, je me dis qu'il y a probablement moyen de faire quelque chose de plus "SQL" que ça

    @++

Discussions similaires

  1. [AC-2007] Requete SQL avec variables
    Par Greg47 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 26/05/2010, 19h07
  2. Requete SQl avec variable d'un combobox
    Par nonopower dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 15/03/2010, 17h08
  3. requete sql avec variable feuil-range
    Par jokenjo dans le forum Excel
    Réponses: 6
    Dernier message: 18/03/2008, 15h47
  4. requete sql avec variable
    Par stefon dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 02/08/2006, 16h29
  5. requete sql avec variable
    Par Mihalis dans le forum Bases de données
    Réponses: 15
    Dernier message: 07/04/2006, 10h17

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