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

MS SQL Server Discussion :

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


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 41
    Points : 22
    Points
    22
    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
    Invité
    Invité(e)
    Par défaut
    j'ai vu des scripts pour faire ça avec du code en dynamique.
    c'est faisable mais au risque de mettre le serveur à genou avec un peu de volumétrie...
    la façon la plus "efficace" est quasiment de faire des recherches par nom de colonnes... Et encore, c'est dans le cas où les noms sont explicites (G351U.id on va dire que ça ne me cause pas vraiment ) .

    Sinon, tu peux peut-être faire des traces pour voir où ça tappe, non? ( http://elsuket.developpez.com/tutori...-cote-serveur/ )

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Il faut tester toutes les colonnes de type texte une à une.
    Vous pouvez écrire une requête en vous appuyant sur les vues systèmes de INFORMATION_SCHEMA.

    Évidemment, plus votre volumétrie est conséquente et plus l'opération sera longue.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    Merci
    vous pouvez m'expliquer un peu plus, et si vous pouvez me donner un petit exemple de la requete

    Cordialement

  5. #5
    Invité
    Invité(e)
    Par défaut
    Il me semble avoir déjà lu un sujet analogue sur ce forum.
    Sinon, google est ton ami pour le trouver ailleurs.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Août 2004
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2004
    Messages : 137
    Points : 188
    Points
    188
    Par défaut
    Bonjour,
    essayez ce script :

    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
     
    SET NOCOUNT ON
     
    -- variables
    DECLARE
    @TAB VARCHAR(128),
    @COL nvarchar(128),
    @CHAINE VARCHAR(500),
    @CMD nvarchar(4000),
    @PARAMS nvarchar(4000),
    @COUNT int
     
    -- Chaine recherchée
    set @CHAINE='test'
     
    --déclaration du curseur qui va récupérer le nom des colonnes
    DECLARE TABLE_CURSOR CURSOR FOR
    SELECT c.name,o.name FROM syscolumns c, sysobjects o
    WHERE o.type='U'
    AND c.id=o.id
    AND c.xtype IN (35,167,231,239,241)
     
    OPEN TABLE_CURSOR
    FETCH NEXT FROM TABLE_CURSOR
    INTO @COL,@TAB
     
    -- parcourt du cursor
    WHILE @@FETCH_STATUS = 0
    BEGIN
       -- requete count() sur la colonne en cours
       SET @CMD = 'select @cnt = count(*) from '+ @TAB +' where '+@COL+' = '+''''+@CHAINE+''''
       -- paramètre
       SELECT @PARAMS = N'@cnt      int      OUTPUT'
       --execution de la requete
       EXEC sp_executesql @CMD, @PARAMS, @cnt = @COUNT OUTPUT
     
    if(@COUNT > 0)
    	PRINT 'Valeur '''+@CHAINE+''' trouvée dans la colonne '+@COL+' de la table '+@TAB;
     
    	-- enregistrement suivant
    	FETCH NEXT FROM TABLE_CURSOR INTO @COL,@TAB;
    END 
    CLOSE TABLE_CURSOR
    DEALLOCATE TABLE_CURSOR
    Le type de la colonne est filtré sur du type text pour qu'il y ait moins de colonne à examiner.
    Vous trouverez les différents type en executant la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM systypes
    J'espère que la requête ne sera pas trop longue à executer pour vous !

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    si vous aviez lu mon cours sur Transact SQL, un des exemples est un tel "grep" :
    PROCEDURE SP_SEARCH_STRING_ANYFIELD_ANYTABLE
    dans : http://sqlpro.developpez.com/cours/s...r/transactsql/

    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/ * * * * *

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    si vous aviez lu mon cours sur Transact SQL, un des exemples est un tel "grep" :
    PROCEDURE SP_SEARCH_STRING_ANYFIELD_ANYTABLE
    dans : http://sqlpro.developpez.com/cours/s...r/transactsql/
    Je savais que j'avais lu ça pas loin! Merci SQLPro

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 Accès aux données
    Réponses: 3
    Dernier message: 26/10/2010, 11h19
  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