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 :

Comment rechercher une valeur qui se trouve dans une base de données


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 35
    Points : 24
    Points
    24
    Par défaut Comment rechercher une valeur qui se trouve dans une base de données
    Bonjour,

    J'ai une base de données ayant plusieurs table de dans.
    J'ai une valeur (type string), et je veux trouver à quelle table ma valeur appartient

    Comment je dois faire ?

    Merci

  2. #2
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 756
    Points : 2 990
    Points
    2 990
    Par défaut
    ... Bonne chance ...

    Si tu n'as pas la moindre idée du nom de la table ni même du nom du champs, tu vas être obligé de scanner toute ta DB; table par table et champs par champs.

    SQL Server permet de retrouver via une table système la liste des tables et la liste des champs. Avec un peu de scripting, tu peux écrire une boucle là-dessus.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Peux-tu nous en dire un peu plus sur le but précis de ce besoin étrange qui équivaut à rechercher dans quels ouvrages de la Bibliothèque de France se trouve le mot 'avoir' ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Peux-tu nous en dire un peu plus sur le but précis de ce besoin étrange qui équivaut à rechercher dans quels ouvrages de la Bibliothèque de France se trouve le mot 'avoir' ?
    Mon problème est beaucoup moins compliqué que ce que tu dis.
    En fait, cette valeur appartient à au plus de 3 tables, mais on ne sais pas les quelles ...

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Tu n'as pas précisé l'environnement sur lequel tu travailles.

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    Je travaille sur Visual C#

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Quel SGBD?

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    MySql server

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Je ne connais ni l'un ni l'autre

    Vu le manque de proposition, je vais te proposer une solution qui n'est sans doute pas la plus efficace, mais qui a le mérite d'exister

    Le principe serait de choper dans les tables systeme la liste des table de ta DB (sous Oracle : user_tables ou all_tables avec condition sur le owner selon le besoin, pas besoin de récupérer les tables system par exemple), puis la liste de colonne de chacune des tables (sous Oracle : all_tab_columns ou user_tab_columns) pour lancer pour chaque colonne de chaque table des requetes de type "insert into table_test values (latable, lacolonne, (select count(*) from latable where lacolonne = 'valeur_cherchee'))", et selectionner à la fin dans cette table de test les count > 0.

    En pl/sql, j'aurai pu t'en dire plus, mais pas en C#/Mysql.

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 571
    Points
    52 571
    Billets dans le blog
    5
    Par défaut
    j'ai fait ceci en Transact SQL dans mes papiers :
    http://sqlpro.developpez.com/cours/s...r/transactsql/
    SP_SEARCH_STRING_ANYFIELD

    basez vous dessus (en plus MySQL utilise les vues d'info de schéma).

    Ajoutez la lecture de toutes les bases.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  11. #11
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 756
    Points : 2 990
    Points
    2 990
    Par défaut
    Ci-dessous un bout de code pour SQL Server que j'ai écris et qui permet de retrouver chaque table possédant un champs ayant le mot cléf (voir variable SearchPattern) dans son nom. En t'inspirant de ce code, tu pourrais peut-être l'adapter pour ton besoin.

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    -- Scan the entire database and look up in every tables if the 
    -- table has a field with a specific keyword in his name
     
    DECLARE @SearchPattern VARCHAR(64)
    DECLARE @sql VARCHAR(1024)
    DECLARE @TableName VARCHAR(64)
    DECLARE @FieldName VARCHAR(64)
     
    -- Type here below the pattern that you wish to retrieve
     
    SET @SearchPattern = 'FldName'
     
    DECLARE TABLES CURSOR
    FOR SELECT o.name, c.name
       FROM syscolumns c
       INNER JOIN sysobjects o ON c.id = o.id
       WHERE o.type = 'U'
       ORDER BY o.name, c.name
     
    OPEN TABLES
    FETCH NEXT FROM TABLES
    INTO @TableName, @FieldName
     
    WHILE @@FETCH_STATUS = 0
    BEGIN
     
    IF CHARINDEX (@SearchPattern, @FieldName) >0 
       PRINT 'Table ' + @TableName + ' has a field called ''' + @FieldName + ''''
     
       FETCH NEXT FROM TABLES
       INTO @TableName, @FieldName
     
    END
     
    CLOSE TABLES
    DEALLOCATE TABLES
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

Discussions similaires

  1. [Débutant] recuperer 2 valeurs qui se trouve dans une table
    Par chuspyto dans le forum VB.NET
    Réponses: 2
    Dernier message: 06/05/2013, 20h22
  2. [Lazarus] Comment utiliser une fonction qui se trouve dans une DLL externe ?
    Par [ZiP] dans le forum Lazarus
    Réponses: 2
    Dernier message: 01/12/2012, 00h33
  3. Réponses: 1
    Dernier message: 09/02/2009, 01h36
  4. Réponses: 2
    Dernier message: 02/04/2008, 19h55
  5. [C#]Comment executer du code qui se trouve dans une string ?
    Par freddyboy dans le forum Windows Forms
    Réponses: 4
    Dernier message: 28/02/2005, 16h31

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