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 :

SELECT @Colonne FROM @Table WHERE ID = @ID


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Janvier 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte réseau
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2016
    Messages : 10
    Par défaut SELECT @Colonne FROM @Table WHERE ID = @ID
    Bonjour,

    Je suis débutant en SQL et je travaille sur une fonction qui recherche une chaîne de caractères dans toutes les tables d'une base.
    Bon c'est peut-être fou mais osef, c'est pour le fun et pour apprendre


    J'ai donc préalablement codé une fonction qui répertorie les noms de toutes les colonnes de toutes les tables de ma base.

    Jusque là, pas de problème.

    J'ai enregistré ça dans une table dbo._TABLE_COLUMNS et voici à quoi elle ressemble :

    ID | Nom_table_1 | Nom_table_2 | Nom_table_3 | ...
    1 | Nom_Colonne_1 | Nom_Colonne_1 | Nom_Colonne_1 | ...
    2 | Nom_Colonne_2 | Nom_Colonne_2 | Nom_Colonne_2 | ...
    3 | Nom_Colonne_3 | Nom_Colonne_3 | Nom_Colonne_3 | ...
    4 | Nom_Colonne_4 | Nom_Colonne_4 | Nom_Colonne_4 | ...
    5 | Nom_Colonne_5 | Nom_Colonne_5 | Nom_Colonne_5 | ...



    J'ai également une 2e table dbo._Table_List qui ressemble à ça :

    Table_ID | Table_Name
    1 | Nom_table_1
    2 | Nom_table_2
    3 | Nom_table_3
    4 | Nom_table_4
    5 | Nom_table_5



    Maintenant j'aimerai faire la fonction recherche et afficher le résultat sous forme :

    PRINT '"'+@Search+'" trouvé dans la table "'+@Table+'" à la colonne "'+@Colonne+'".'

    Pour arriver à mon résultat, je dois d'abord définir @base et @colonne qui seront incrémentées en fonction de l'ID des 2 tables.


    Problème, je n'arrive pas à définir une variable en fonction d'un SELECT @variable FROM.


    Je m'explique.

    Pour pouvoir faire la fonction recherche, je dois définir @base et @colonne.


    Voici mon code :

    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
    17
    18
    19
    20
    21
    22
    USE NomDeMaBase
    GO
    DECLARE @Search varchar(512) , @Table varchar(512) , @Colonne varchar(128) , @Table_ID varchar(512) ,  @Colonne_ID varchar(512)
     
    /*ENTRER ICI LA CHAINE DE CARACTERES RECHERCHEE*/
    SET @Search = 'chaine de caractères'
     
    SET @Table_ID = 1
    SET @Colonne_ID = 1
     
     
     
                    /*Ici je récupère bien le nom de la 1e table à "scanner".
                      On va dire par exemple que @table contient "Nom_table_1" */
     
    		SET @Table = (SELECT Table_Name FROM dbo._Table_List WHERE Table_ID = @Table_ID)
     
     
     
    		/*La ligne qui me pose problème : apparemment c'est le SELECT @Table qui ne passe pas*/
     
    		SET @Colonne = (SELECT @Table FROM dbo._TABLE_COLUMNS WHERE ID = ''+@Colonne_ID+'')
    Je n'ai pas la bonne valeur qui sort de mon @Colonne car il devient égal à @Table_Short :/

    J'ai essayé plusieurs méthodes comme par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SET @Col_Request = N'SET @Colonne = (SELECT '+@Table_Short+' From dbo._TABLE_COLUMNS WHERE ID = '+''''+@Colonne_ID+''''+')'
    PRINT @Col_Request
    EXEC sp_executesql @Col_Request
    PRINT @Colonne
    Là il me dit carrément que @Colonne n'est pas défini : Must declare the scalar variable "@Colonne".


    Je sèche

    Quelqu'un à une idée ?

    Merci

  2. #2
    Membre du Club
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Janvier 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte réseau
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2016
    Messages : 10
    Par défaut
    Personne n'a d'idée ?

    Allez je suis sûr qu'il y a des pro-SQL ici, where else ?

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 622
    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 622
    Billets dans le blog
    10
    Par défaut
    Des idées sans doute, mais encore faudrait il qu'il y ait une question clairement formulée
    - que cherchez vous à faire
    - avec quelles tables, quels index, quelle volumétrie
    - quel est votre jeu d'essai
    - quel résultat avez vous obtenu

  4. #4
    Membre du Club
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Janvier 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte réseau
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2016
    Messages : 10
    Par défaut
    Je ne comprends pas, mon message original a disparu

    En fait ma question est simple, je cherche à trouver la bonne syntaxe pour faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET @Colonne = (SELECT @Table FROM dbo._TABLE_COLUMNS WHERE ID = ''+@Colonne_ID+'')
    "SELECT @Variable FROM" ne fonctionne pas.

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 622
    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 622
    Billets dans le blog
    10
    Par défaut
    Pour ce genre de besoin, il faut faire du sql dynamique :
    - préparer la requete au moyen de constantes assemblées avec des paramètres
    puis
    - exécuter la requete
    Recherchez dans le tuto SQL vous trouverez des infos sur le SQL dynamique

    Attention : le SQL dynamique présente des risques d'un point de vue sécurité (injections SQL) et peut nuire aux performances

  6. #6
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET @Colonne = (SELECT @Table FROM dbo._TABLE_COLUMNS WHERE ID = ''+@Colonne_ID+'')
    Je pense qu'il y a erreur dans ta syntaxe !?
    Est-ce vraiment ça que tu cherches à faire ?
    Et c'est quoi l'utilité de ces apostrophes dans ta requête ?

    Tu ne chercherais pas à faire ça plutôt ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT @Colonne = NOM_COLONNE FROM dbo._TABLE_COLUMNS WHERE ID = @Colonne_ID

Discussions similaires

  1. [AC-2007] est-i possible de faire un SELECT MAVARIABLE FROM TABLE ?
    Par tibofo dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 26/07/2010, 11h12
  2. select from table where in
    Par lcaya dans le forum SQL
    Réponses: 5
    Dernier message: 10/03/2010, 17h50
  3. select id from table where id in ( select * from table2 )
    Par alad1.s dans le forum Langage SQL
    Réponses: 1
    Dernier message: 21/10/2009, 20h20
  4. [WD12] Selection colonne de table
    Par J0r_x dans le forum WinDev
    Réponses: 3
    Dernier message: 14/08/2009, 11h28
  5. Select from table where
    Par kabalonda dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 25/07/2007, 17h43

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