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 :

Recherche de Donnée dans une base


Sujet :

MS SQL Server

  1. #1
    Membre habitué Avatar de Poisson59
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 213
    Points : 140
    Points
    140
    Par défaut Recherche de Donnée dans une base
    (Pour ceux qui on le temps)

    Bonjour à Tous

    j'utilise une base MABASE
    avec une centaine de tables

    Est t'il possible de récupérer le nom des tables qui contiennent dans leurs colonnes la chaine "developpez.com"

    Merci !

  2. #2
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    select obj.name from syscolumns col
    join sysobjects obj on obj.id=col.id
    where col.name like '%developpez.com%'

    A+
    serge

  3. #3
    Membre habitué Avatar de Poisson59
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 213
    Points : 140
    Points
    140
    Par défaut
    Salut
    en fait je ne cherche pas une colonne qui s'appeller "developpez.com"

    mais dans quelle colonne de quel table j'ai la valeur "Developpez.com"

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    Salut,
    voilà une bonne méthode de bourrin.
    A noter que :

    1- si tes 100 tables ont 100 colonnes et 1 millions de ligne, ma proc va bien mettre 20h à tourner
    2- Histoire de s'affranchir des majuscules/minusciles, j'ai forcé la recherche en majusucles (UPPER(...) dans la proc). Ca veut dire que si tu veux changer la chaine à rechercher, tu dois la mettre en majuscules.
    3- J'ai filtré les types de colonnes pour ne comparer que les colonnes de types alphanumériques. Ca sert à rien de comparer les colonnes en int, float, si ce que tu recherches est de l'alphanumérique.
    4- J'ai aussi filtréles tables pour ne prendre que celles utilisateurs (crées par toi). Tu peux faire sauter ce filtre en faisant gaffe de ne mettre que des tables et pas autres types d'objets.
    5- J'ai SQL2000, collapse english, code testé et qui marche.

    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
     
    declare @SQL nvarchar(4000)
    declare @SELECT nvarchar(4000)
    declare @tableName nvarchar(4000)
    declare @colName nvarchar(4000)
    declare @tableID int
    declare @colID int
     
    declare cur_tables cursor for
    select distinct id, name
    from sysobjects
    where type = 'U' --Uniquement les tables utilisateurs
     
    open cur_tables
    fetch next from cur_tables into @tableId, @TableName
    while @@fetch_status = 0
    begin
    	declare cur_colonnes cursor for
    	select distinct c.colid, c.name
    	from sysobjects o INNER JOIN syscolumns c
    	ON c.id = o.id
    	WHERE o.id = @tableID
    	AND c.xtype in (
    	175, --char
    	239, --nchar
    	99, --next
    	231, --nvarchar
    	35, --text
    	167) --varchar
     
    	open cur_colonnes
    	fetch next from cur_colonnes into @colId, @colName
    	while @@fetch_status = 0
    	begin
     
    		SET @SQL = 'IF exists (select top 1 [' + @Colname + '] from [' + @TableName + '] WHERE UPPER([' +@colName + ']) LIKE ''%DEVELOPPEZ.COM%'') SELECT '''+ @TableName + ''', ''' + @Colname + ''''
    		exec (@sql)
    		fetch next from cur_colonnes into @colId, @colName
    	end
    	close cur_colonnes 
    	deallocate cur_colonnes 
    	fetch next from cur_tables into @tableId, @TableName
    end
    close cur_tables
    deallocate cur_tables

  5. #5
    Membre habitué Avatar de Poisson59
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 213
    Points : 140
    Points
    140
    Par défaut
    Ok Zers Merci je vais essayer

  6. #6
    Membre habitué Avatar de Poisson59
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 213
    Points : 140
    Points
    140
    Par défaut
    Il me met une erreur de type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Les types de données text, ntext et image sont incorrects dans cette sous-requête ou cette expression d'agrégation.
    Les types de données text, ntext et image ne peuvent pas être comparés ou classés, sauf lors de l'utilisation de l'opérateur LIKE ou IS NULL.
    je vais essayer de changer des parametres

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    Citation Envoyé par Poisson59
    Il me met une erreur de type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Les types de données text, ntext et image sont incorrects dans cette sous-requête ou cette expression d'agrégation.
    Les types de données text, ntext et image ne peuvent pas être comparés ou classés, sauf lors de l'utilisation de l'opérateur LIKE ou IS NULL.
    je vais essayer de changer des parametres

    Etonnant que je n'ai pas cette erreur... D'autant plus étonnant qu'il confirme qu'on peut utiliser LIKE sur ces types de données !!!!!!

    Enlève les types text et ntext du filtre XTYPE en début de proc et essaye de relancer pour voir.

  8. #8
    Membre habitué Avatar de Poisson59
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 213
    Points : 140
    Points
    140
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    declare cur_colonnes cursor for
    	select distinct c.colid, c.name
    	from sysobjects o INNER JOIN syscolumns c
    	ON c.id = o.id
    	WHERE o.id = @tableID
    	AND c.xtype in (
    	175, --char
    	239, --nchar
    	99, --next
    	231, --nvarchar
    	35, --text
    	167) --varchar
    J'ai bien les text mais pas les ntext ???

  9. #9
    Membre habitué Avatar de Poisson59
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 213
    Points : 140
    Points
    140
    Par défaut
    ok ca à l'air de marché
    en plus j'ai rajouter un parametre à la procedure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CREATE PROCEDURE MAPROC
    @SearchWord Varchar(32) -- mot recherché
    AS
    ....
    Merci Beaucoup Zers de ton aide je sais que tu as du passer pas mal de temps la dessus et je t'en remercie du fond du cerveau !!



  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    Citation Envoyé par Poisson59
    ok ca à l'air de marché
    en plus j'ai rajouter un parametre à la procedure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CREATE PROCEDURE MAPROC
    @SearchWord Varchar(32) -- mot recherché
    AS
    ....
    Merci Beaucoup Zers de ton aide je sais que tu as du passer pas mal de temps la dessus et je t'en remercie du fond du cerveau !!


    De rien.

    Par contre, oeux-tu poster l'intégralité de ta proc ?

  11. #11
    Membre habitué Avatar de Poisson59
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 213
    Points : 140
    Points
    140
    Par défaut
    ok

    voici l'intégral de la Procédure

    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
     
    CREATE PROCEDURE MAPROC
          SearchWord Varchar(32) -- mot recherché
    AS
    BEGIN
    declare @SQL nvarchar(4000)
    declare @SELECT nvarchar(4000)
    declare @tableName nvarchar(4000)
    declare @colName nvarchar(4000)
    declare @tableID int
    declare @colID int
     
    declare cur_tables cursor for
    select distinct id, name
    from sysobjects
    where type = 'U' --Uniquement les tables utilisateurs
     
     
    open cur_tables
    fetch next from cur_tables into @tableId, @TableName
    while @@fetch_status = 0
    begin
    	declare cur_colonnes cursor for
    	select distinct c.colid, c.name
    	from sysobjects o INNER JOIN syscolumns c
    	ON c.id = o.id
    	WHERE o.id = @tableID
    	AND c.xtype in (
    	175, --char
    	239, --nchar
    	231, --nvarchar
    	167) --varchar
     
    	open cur_colonnes
    	fetch next from cur_colonnes into @colId, @colName
    	while @@fetch_status = 0
    	begin
     
    		SET @SQL = 'IF exists (select top 1 [' + @Colname + '] from [' + @TableName + '] WHERE UPPER([' +@colName + ']) LIKE ''%' + @SearchWord +'%'') SELECT '''+ @TableName + ''', ''' + @Colname + ''''
    		exec (@sql)
    		fetch next from cur_colonnes into @colId, @colName
    	end
    	close cur_colonnes 
    	deallocate cur_colonnes 
    	fetch next from cur_tables into @tableId, @TableName
    end
    close cur_tables
    deallocate cur_tables
    END
    @ + ZZ

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

Discussions similaires

  1. Recherche de données dans une base
    Par cmo1979 dans le forum Général VBA
    Réponses: 0
    Dernier message: 27/02/2013, 14h02
  2. Rechercher des informations dans une base de donnée en excel
    Par simonasjdp dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/07/2009, 19h10
  3. recherche de mots dans une base de données
    Par arakna dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 08/04/2009, 15h27
  4. recherche en VBA dans une base de donnée excel
    Par INCO13 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 24/06/2008, 13h58

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