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 :

Problème avec des requêtes dynamiques [2012]


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de StripMat
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2014
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 206
    Par défaut Problème avec des requêtes dynamiques
    Bonjour, je cherche à mettre en place des triggers pour tracer des actions éffectuées en base de donnée, seulement je rame pour construire l'un deux.

    Je souhaite récupérer la valeur d'un champ, mais ce code-ci me retourne le nom de la colonne et non sa valeur !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET @Value = (SELECT @column FROM UneTable)
    @column contenant bien sûr le nom d'un champ

    J'ai bien sûr éssayé quelque chose comme sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET @SQL = ('SET @Value = (SELECT '+@Column+' FROM UneTable WHERE IdTable = @ID)')
    EXEC(@SQL)
    Mais j'ai un méssage d'érreur qui m'est retourné me disant que ma variable @Value n'est pas déclarée... Alors que je la déclare bien comme il faut, pareil pour @ID


    J'ai lu sur le web qu'il faudrait utiliser des fonctions ou quelque chose dans ce genre, mais j'ai pas réussi non plus.
    Faire un SELECT ou un INSERT dynamiquement me pose aucun problème, mais un SET de variable, j'y ai passé mon après-midi sans succès

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour

    C'est normal car avec EXEC, la requête est exécutée dans un nouveau contexte, où vos variables n'existent pas.


    Un peu de lecture pour résoudre ce problème

  3. #3
    Membre confirmé Avatar de StripMat
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2014
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 206
    Par défaut
    Merci !

    Oui j'avais identifié le problème de contexte avec EXEC mais ne savais comment le contourner, merci pour le lien, j’essaie sa tout de suite !

  4. #4
    Membre confirmé Avatar de StripMat
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2014
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 206
    Par défaut
    hmm, quelque chose semble foirer dans ma requête, la valeur retournée est toujours le nom de colonne et non la valeur de ce champ !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DECLARE @Column nvarchar(50)
    DECLARE @Value nvarchar(max)
    DECLARE @SQL  nvarchar(max)
     
    SET @SQL = N'SELECT @col FROM EcrituresComptable WHERE IdEcriture = (SELECT MAX(IdEcriture) FROM EcrituresComptable)';
     
    SET @Value = N'@col varchar(50), @ValueOUT varchar(50) OUTPUT';
    EXEC sp_executesql @SQL, @Value, @col = @Column, @ValueOUT = @Value OUTPUT;

  5. #5
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Oui !

    Il faut mettre le nom de la colonne, et non la variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SET @SQL = N'SELECT ' + @col + ' FROM EcrituresComptable WHERE IdEcriture = (SELECT MAX(IdEcriture) FROM EcrituresComptable)';

  6. #6
    Membre confirmé Avatar de StripMat
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2014
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 206
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Oui !

    Il faut mettre le nom de la colonne, et non la variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SET @SQL = N'SELECT ' + @col + ' FROM EcrituresComptable WHERE IdEcriture = (SELECT MAX(IdEcriture) FROM EcrituresComptable)';
    Sa fonctionne ! Merciiii !

    EDIT : Ah ouai, ok sa m'affiche le résultat escompté, sauf que quand je fais un 'SELECT @Value', la valeur retournée est NULL

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Vous n'avez pas précisé votre besoin global, ni tout ce que faisaient vos triggers, mais notez tout de même qu'il existe des fonctionnalités intégrées à SQL Server pour tracer les modifications, comme par exemple CHANGE DATA CAPTURE qui a en plus l'avantage d'être asynchrone, et ne pénalise donc pas les opérations de mise à jour. Je vous invite à y jeter un oeil pour voir si cela correspond à votre besoin.

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

Discussions similaires

  1. [AC-2007] Problème avec des requêtes imbriquées
    Par triaguae dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 15/02/2011, 14h43
  2. Problème avec des requète imbriquée dans le from
    Par Stouille33 dans le forum Développement
    Réponses: 5
    Dernier message: 23/10/2008, 19h17
  3. Problème avec des sous requêtes
    Par nicocolt dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/10/2007, 15h19
  4. Réponses: 6
    Dernier message: 20/02/2007, 17h00
  5. Problème avec des requêtes
    Par yoda7666 dans le forum ASP
    Réponses: 13
    Dernier message: 09/03/2006, 18h16

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