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

Langage SQL Discussion :

SQL set= variable nom


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juillet 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2017
    Messages : 5
    Par défaut SQL set= variable nom
    Bonjour,

    Je débute sur ce forum. Je rencontre un souci tout bête, je souhaite exécuter une requête avec la condition WHERE qui renvoi à une saisi de l'utilisateur. Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    declare @debut_nom_table varchar(10) 
    set @debut_nom_table  = @BASE
    
    declare @NOM varchar(100) 
    set @NOM  =  @NAME 
    
    declare @requete_test varchar(MAX)
    
    set @requete_test = 'select * FROM ' + @debut_nom_table + '_PERSONNE WHERE NOM_PERS=' + @NOM
    
    exec (@requete_test)

    L'utilisateur doit juste saisir le nom de la société (@debut_nom_table) et le nom de la personne (@NOM) pour avoir les info.
    -Pour @debut_nom_table, on peut saisir sans apostrophe et ça fonctionne.
    -Par contre pour @NOM, on doit saisir avec des apostrophes sinon ça fonctionne pas (car c'est un champ type texte).


    Comment peut-on faire afin d'éviter que l'utilisateur n'a pas à saisir les apostrophes? genre il a juste à taper le nom DUPOND et non 'DUPOND'


    Merci d'avance pour votre aide précieuse

  2. #2
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Bonjour,

    1. Il faudrait commencer par donner le SGBD. Ici je pense qu'il s'agit de SQL Server, vu la syntaxe.

    2. Laisser les utilisateurs piloter ainsi la requête est dangereux, j'espère que vous faites des tests sur les variables (sinon, faites une petite recherche sur l'injection SQL).

    3. Avoir une table par société est particulièrement moche, vous devriez avoir une seule table, avec une colonne société.

    4. Utilisez sp_executesql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     EXEC sp_executesql N'SELECT @test', N'@test nvarchar', @test=1

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 599
    Billets dans le blog
    10
    Par défaut
    J'abonde totalement dans le sens des remarques qui précèdent, et j'ajoute que faire un select '*' est dangereux car le résultat est soumis aux aléas de modification de la table et le plus souvent inutile car vous transportez des colonnes dont vous n'avez probablement que faire.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juillet 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2017
    Messages : 5
    Par défaut
    Bonjour,

    Oui il s'agit du SQL Server.

    Dans mon entreprise, chaque BU on leur propre serveur où est installé l'outil comptable...
    Cet outil nomme ses tables commençant pas le nom de la BU+Nom de la table.

    Ces requêtes sont des tests (d'où "*") qui me permettra de construire un rapport avec Visual studio que je les déploierai sur différents serveurs.

    Merci pour votre aide. Je vais tester le code et je vous dirai si cela marche

  5. #5
    Membre à l'essai
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juillet 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2017
    Messages : 5
    Par défaut
    J'ai testé ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    EXECUTE sp_executesql 
              N'select * FROM ' + @debut_nom_table + 'PERSONNE WHERE NOM_PERS=@NOM' ,
              N'@NOM nvarchar',
              @NOM = 1;
    Mais ça ne marche pas. Erreur au niveau de ' + @debut_nom_table + ' dont je ne sais pas résoudre

  6. #6
    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,

    Vous ne pouvez pas effectuer la concaténation au moment de l'appel de la procédure sp_executesql.

    Générez votre SQL complet dans une variable puis appelez sp_executesql.

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

Discussions similaires

  1. Recupérer Nom d'une Table SQL en Variable
    Par progscoubi dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 11/11/2012, 10h21
  2. Nom de variable = nom de colonne sql
    Par EricGardien dans le forum ASP
    Réponses: 2
    Dernier message: 10/01/2012, 08h50
  3. Requête SQL dynamique avec nom de table dans une variable
    Par jonjack dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 15/09/2011, 14h37
  4. Réponses: 3
    Dernier message: 01/12/2004, 09h43
  5. [SQL SERVER 2000] Noms de variables dynamiques
    Par cassoulet dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 08/09/2004, 11h44

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