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

Développement SQL Server Discussion :

Requête SQL avec variable


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 135
    Par défaut Requête SQL avec variable
    Bonjour,

    Je suis sous Linux, et j'utilise l'outil FreeTDS pour me connecter à ma base.

    J'essaie de créer un script pour me remonter certaines informations, cependant j'ai un problème, je n'arrive pas à déclarer ma variable dans ma ligne de commande.

    Voici le script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    USE GTB_MATMUT
    go
    declare @agence int
    select top 1 valeur from agence_capteur where id_agence = @agence and id_capteur = 10001 order by date_heure desc
    go
    exit
    Voici la commande que je lance pour effectuer le script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TDSVER=7.0 tsql -H **** -p **** -U **** -P **** < script_elec.sql
    Sauf que j'aimerai pouvoir renseigner l'id_agence directement dans ma commande, comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TDSVER=7.0 tsql -H **** -p **** -U **** -P **** < script_elec.sql @agence
    mais je n'y arrive pas, comment faire ?

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Billets dans le blog
    8
    Par défaut
    Bonjour,
    Je n'ai pas l'occasion d'utiliser FreeTDS, mais sous sqlcmd, une solution serait de procéder comme suit :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    USE GTB_MATMUT
    go
    declare @agence int
     -- affectation de la variable @agence depuis le paramètre externe initialisé dans le fichier batch (l'appelant ) 
    set @agence = $(cmdvarAgence)
    select top 1 valeur from agence_capteur where id_agence = @agence and id_capteur = 10001 order by date_heure desc
    go

    Puis dans dans ton fichier de commande faire quelque chose comme ceci :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlcmd -S MonServeur -d Mabase -v cmdvarIdAgence=1245 -i script_elec.sql

    Remarque :
    Si cette technique de gestion des variables de substitution n'existe pas sous FreeTDS/Linux, tu peux aisément sous linux garder le même principe et réaliser ton propre traitement shell pour substituer les paramètres (dans notre exemple il s'agit du substituer le paramètre $(cmdvarAgence) par la valeur 1245), et ce, avant de soumettre le script transformé à FreeTDS
    Il faut juste garder à l'esprit qu'il s'agit de paramètres de substitution stricto textuelle. Il ne s'agit donc pas de paramètres typés. Le fonctionnement et la finalité comparée à sqlcmd sera presque identique.

    A+

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 135
    Par défaut
    Effectivement sous tsql cette syntaxe/commande n'est pas permise.

    Par contre je ne comprends pas comment je peux faire pour obtenir le même résultat en bash.

    Voici ce que j'ai fais :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/bash
    # Argument
    agence=$1
     
    TDSVER=7.0 tsql -H **** -p **** -U **** -P **** < test.sql

    test.sql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    USE GTB_MATMUT
    go
    declare @agence int
    select top 1 valeur from agence_capteur where id_agence = @agence and id_capteur = 10001 order by date_heure desc
    go
    exit

    Enfin la commande que je tape mais qui ne me retourne pas de valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    bash -x test.sh 4505
    + agence=4505
    + TDSVER=7.0
    + tsql -H **** -p **** -U **** -P ****
    locale is "fr_FR.UTF-8"
    locale charset is "UTF-8"
    using default charset "UTF-8"
    1> 2> 1> 2> 3> valeur
    1>
    Je constaste un problème de déclaration de variable entre le bash "$" et tsql "@"
    Un petit coup de pouce ne serrait pas de refus

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Billets dans le blog
    8
    Par défaut
    Je suis désolé ! ici ce n'est pas un forum shell/linux !
    La problématique à laquelle tu es maintenant confrontée est l'ordre shell/linux ce n'est plus un problème SQL ni SQL Server.

    Il te faut le cas échéant faire un petit tour sur le forum Linux et voir comment on peut substituer dans un texte une chaine par une autre
    En ce qui te concerne il s'agira de substituer la chaîne littérale $(cmdvarAgence) par une valeur saisie par l'utilisateur (exemple 1245) etc. puis générer un fichier temporaire (exemple script_elec_temp.sql) où le littéral eut été substitué (pour cela voir par exemple la commande sed sous linux).
    Le fichier script_elec_temp.sql pourra par exemple ressembler à ceci :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    USE GTB_MATMUT
    go
    declare @agence int
     -- affectation de la variable @agence depuis le paramètre externe initialisé dans le fichier batch (l'appelant ) 
    set @agence = 1245
    select top 1 valeur from agence_capteur where id_agence = @agence and id_capteur = 10001 order by date_heure desc
    go
    Puis en fin de traitement supprimer le fichier temporaire script_elec_temp.sql

    Remarque :
    - Il s'agit de traitement très classique et commun sous linux
    - Comme tu es sous linux et donc comme tu n'utilises pas sqlcmd (ou pas encore peut être bientôt en SQL server 2016 sous linux ! ) la règle de nommage avec $(...) (exemple $(cmdvarAgence)) n'est plus obligatoire; tu pourras si cela te pose un problème choisir le nom (ou plutôt le littéral) que tu veux. il faut juste veiller à substituer ce littéral par la valeur du paramètre saisie par l'utilisateur ou définie dans la commande shell appelante.

    A+

Discussions similaires

  1. [MySQL] requête SQL avec variables non renseignées
    Par Boris56 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 08/03/2010, 14h50
  2. Requête SQL avec variable externe
    Par Kesle dans le forum Bases de données
    Réponses: 15
    Dernier message: 15/05/2009, 18h14
  3. [MySQL] Requête SQL avec variable
    Par kate59 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/04/2008, 14h12
  4. Requête SQL avec variables
    Par BMT_Benoît dans le forum Windows Forms
    Réponses: 36
    Dernier message: 12/07/2007, 12h35
  5. Problème avec requête SQL avec variables
    Par harry25 dans le forum ASP
    Réponses: 1
    Dernier message: 03/01/2007, 03h41

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