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

Accès aux données Discussion :

localiser une chaine de caractère dans une base de données


Sujet :

Accès aux données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 41
    Par défaut localiser une chaine de caractère dans une base de données
    bonjour,

    je travaille sur une base de données de milliers de tables, j'ai pas le dictionnaire données ce qui rends impossible de localiser les données dans la base de données.
    donc je cherche un programme qui permet de chercher une chaine de caractère dans la base de donnée ou le serveur base de données et retourne le nom de la colonne, la table et la BD , par exemple pour trouver la colonne et table du nom de salarié on saisie un nom du salarié de la société et nous retourne le chemin BD.Table.nomDeColonne.


    cordialement

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Bonjour

    Sur Sql Server (comme tu ne précises pas quel type de SGBD tu utilises) tu peux par exemple faire une requête qui utilise les vues sys.tables et sys.columns de la base et fabriquer dynamiquement des "select" à partir de ces vues.

    Par exemple, à partir de cette requête qui te listes toutes les colonnes de toutes les tables non système :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT 
    C.[name]
    ,T.[object_id]
    ,T.name
    FROM [MyBase].[sys].[columns] C
       JOIN [MyBase].[sys].[tables] T
       ON T.[object_id] = C.[object_id]
       where T.is_ms_shipped = 0
    Il y a l'équivalent sur les autres SGBD.

  3. #3
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Aller, un autre mini script (largement sous optimal, voire totalement inadapté en terme de perf, mais tu peux t'en inspirer).

    Ce script génére une requête "select colonne from table where colonne like '%marecherche%' pour tous les couples ligne-colonne (ce qui est absurde, bien évidemment, il faut faire un select sur les colonnes d'une table et pas un par couple colonne-table) pour les colonnes de type VARCHAR, TEXT, NVARCHAR, NTEXT de la base.


    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
    38
    39
     
    use mybase
    declare @myStringToSearch varchar(100)
    set @myStringToSearch = 'marecherche'
    DECLARE allColumns_cursor CURSOR FOR 
    SELECT C.[name] as colName
                ,T.name as tableName
    FROM [sys].[columns] C
      JOIN [sys].[tables] T
    ON T.[object_id] = C.[object_id]
      where T.is_ms_shipped = 0
         and System_type_id in (35,99,167,231)
     
     
    declare @colName varchar(100)
    declare @tableName varchar(100)
     
    OPEN allColumns_cursor
    FETCH NEXT FROM allColumns_cursor 
    into @colName, @tableName
     
    WHILE @@FETCH_STATUS = 0
    begin
     
     
    declare @sql varchar(200)
     
    set @sql = 'select ' + @colName + ' from ' + @tableName + ' where ' + @colName + ' like ''%' + @myStringToSearch + '%'''
     
    EXEC(@sql)
     
    FETCH NEXT FROM allColumns_cursor 
      into @colName, @tableName
     
    END 
     
     
    CLOSE allColumns_cursor
    DEALLOCATE allColumns_cursor

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Comme j'avais 5mn à perdre, une autre version qui, elle, ne fait qu'une requête par table et affiche les colonnes TEXT & VARCHAR des lignes dont au moins une colonne contient la recherche. Maintenant, "t'as plus qu'à" adapter cela en requête ensembliste (si c'est possible) et l'adapter à tes besoins.

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    declare @myStringToSearch varchar(100)
    set @myStringToSearch = 'maRecherch'
    DECLARE allColumns_cursor CURSOR FOR 
    SELECT C.[name] as colName
    ,T.name as tableName
    FROM [sys].[columns] C
    JOIN [sys].[tables] T
    ON T.[object_id] = C.[object_id]
    where T.is_ms_shipped = 0
    and System_type_id in (35,99,167,231)
     
    declare @colName varchar(100)
    declare @tableName varchar(100)
    declare @working_tableName varchar(100)
    declare @selectList varchar(max)
    declare @whereList varchar(max)
    declare @sql varchar(max)
    OPEN allColumns_cursor
    FETCH NEXT FROM allColumns_cursor 
    into @colName, @tableName
    WHILE @@FETCH_STATUS = 0
    begin
    if coalesce(@tableName,'') != coalesce(@working_tableName,'')
    begin
    if not @working_tableName is null
    begin 
    set @sql =@selectList+ ' from ' + @working_tableName + ' ' + @wherelist
    EXEC(@sql)
    end
    set @working_tableName = @tableName
    set @selectList = 'select ' + @colName
    set @whereList = 'where (' + @colName + ' like ''%' + @myStringToSearch + '%'')'
    end
    else
    begin
    set @selectList = @selectList + ', ' + @colName
    set @whereList = @whereList + 'or (' + @colName + ' like ''%' + @myStringToSearch + '%'')'
    end
    FETCH NEXT FROM allColumns_cursor 
    into @colName, @tableName
    END 
    if not @working_tableName is null
    begin
    set @sql =@selectList+ ' from ' + @working_tableName + ' ' + @wherelist
    EXEC(@sql)
    end
    CLOSE allColumns_cursor
    DEALLOCATE allColumns_cursor

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/12/2013, 18h10
  2. localiser une chaine de caractère dans une base de données
    Par hayassinet dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/10/2010, 18h13
  3. [MySQL] enregistrer une chaine de caractére dans la base de donnée
    Par leaderchips dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 11/04/2010, 20h35
  4. [String]Recherche d'une chaine de caractères dans une autre
    Par Crazyblinkgirl dans le forum Langage
    Réponses: 3
    Dernier message: 29/07/2004, 11h51
  5. recherche d'une chaine de caractère dans une données text
    Par jdeheul dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 17/06/2004, 16h35

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