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 :

Requete SQL de recherche dans toute la base


Sujet :

Langage SQL

  1. #1
    Membre averti

    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Décembre 2003
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 333
    Points : 382
    Points
    382
    Billets dans le blog
    1
    Par défaut Requete SQL de recherche dans toute la base
    Bonjour,

    je cherche à faire une requête sur toute une base pour rechercher ou se trouve le motif X. Le problème c'est que je ne sais pas comment faire avec where puisque where vise des tables et pas des bases. De plus Like implique le predicat where Table like motif et je ne sais pas quelle table est concernée.

    La base est du SQL 2000.

    Merci de votre aide si vous avez une piste.



    John.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 804
    Points
    30 804
    Par défaut
    Si j'ai bien compris, tu cherches une sous-chaîne dans une colonne, que tu ne connais pas, d'une table, que tu ne connais pas non plus, à l'intérieur de ta base de données...
    C'est bien ça ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre averti

    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Décembre 2003
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 333
    Points : 382
    Points
    382
    Billets dans le blog
    1
    Par défaut
    oui, tout à fait..

  4. #4
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 116
    Points : 95
    Points
    95
    Par défaut


    Et que sais-tu?(petite ironie pas méchante )
    Eu gosto de trabalhar porque trabalhar faz bem,
    mas gosto mais de descanso que nao faz mal a ninguem

  5. #5
    Membre averti

    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Décembre 2003
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 333
    Points : 382
    Points
    382
    Billets dans le blog
    1
    Par défaut
    Heu pas grand chose lol, sinon, je serais pas ici à demander, je répondrai plutôt

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 804
    Points
    30 804
    Par défaut
    Pour cela, il faut que tu accèdes aux tables du dictionnaire de données pour préparer dynamiquement les requêtes qui te permettront de consulter les tables de ta base de données.
    Le langage SQL ne prend pas en charge le mode BdC. Il faut tout préciser dans ta requête : nom de base de données (ou schéma), nom de table, nom de colonne.
    Bien que la structure des tables du dictionnaire aient été normalisées, les éditeurs de SGBD ne se pressent pas de le prendre en charge dans leurs produits.
    Sur le principe, il faut attaquer la table des colonnes, en ne gardant que celles qui sont de type caractère, préparer la liste des requêtes à exécuter, puis les exécuter une à une.
    Je connais peu SQL Server, et encore moins ses tables de dictionnaire, mais l'idée est dans la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT  'SELECT '''
            || TRIM(databasename)   || ''', '''
            || TRIM(tablename)  || ''', '''
            || TRIM(columnname) || ''', '
            || TRIM(columnname) || ' FROM '
            || TRIM(databasename)   || '.'
            || TRIM(tablename)  || ' WHERE '
            || TRIM(columnname) || ' LIKE ''%ma_chaine%'';'
    FROM    dictionnary.columns
    WHERE   columntype IN ('CHAR', 'VARCHAR')
        AND columnlength >= CHAR_LENGTH('ma_chaine')
    ;
    Bon courage
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  7. #7
    Membre averti

    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Décembre 2003
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 333
    Points : 382
    Points
    382
    Billets dans le blog
    1
    Par défaut
    Ca à l'air pas mal. Sauf qu'avec ma petite expérience en SQL, j'ai peur de ne pas tout saisir. Je met ou les noms de tables et les champs ? Par exemple, ma table c'est 'onepoint' et j'ai 2 tables, alpha et beta, avec dedans les champs a1, a2 a3 et b1, b2, b3 ?

  8. #8
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 804
    Points
    30 804
    Par défaut
    La requête que je te proposais va construire une requête pour chaque colonne de type caractère de chaque table de ta base.
    Maintenant, si tu sais comment s'appellent tes colonnes et dans quelles tables elles se trouvent, tu n'as pas besoin d'une usine à gaz.
    Contente-toi d'une requête simple par table...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  9. #9
    Membre averti

    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Décembre 2003
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 333
    Points : 382
    Points
    382
    Billets dans le blog
    1
    Par défaut
    Oui, mais non, lol j'ai peut être plus de 300 tables dans la base :/ C'est ça surtout mon problème ... Merci quand même pour ta requête.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 127
    Points : 70
    Points
    70
    Par défaut
    Ba je comprends pas... pourquoi sa requête ne te satisfait pas ??

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 25
    Points : 30
    Points
    30
    Par défaut Procédure de recherche de chaine dans base SQL Server
    Bonjour,
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    CREATE PROCEDURE spTrouveChaineDsColonnes (@NomTable sysname = NULL,
    	@ChaineCherchee varchar(500))
    AS
     
    	DECLARE @NomColonne nvarchar(128),
    		@TypeDonnee nvarchar(128),
    		@lig smallint,
    		@NbLig int,
    		@sql nvarchar(1000)
     
    	DECLARE Curseur_Recherche CURSOR FAST_FORWARD FOR 
    		SELECT [name]
    		FROM SYSOBJECTS 
    		WHERE (
    				OBJECTPROPERTY(id, N'IsMsShipped') = 0
    				AND OBJECTPROPERTY(id, N'IsUserTable') = 1
    			) AND (@NomTable IS NULL OR [name] = @NomTable)
    		ORDER BY [name]
     
    	OPEN Curseur_Recherche
     
    	FETCH NEXT FROM Curseur_Recherche 
    	INTO @NomTable
     
    	SET @ChaineCherchee = '%' + @ChaineCherchee + '%'
     
    	WHILE @@FETCH_STATUS = 0
    	BEGIN
    		SET @lig = 1
     
    		SELECT @NbLig = MAX([ORDINAL_POSITION])
    		FROM [INFORMATION_SCHEMA].[COLUMNS]
    		WHERE [TABLE_NAME] = @NomTable 
    		GROUP BY [ORDINAL_POSITION]
     
    		WHILE @lig <= @NbLig
    		BEGIN 
    			SELECT @NomColonne = '[' + [COLUMN_NAME] + ']',
    				@TypeDonnee = [DATA_TYPE]
    			FROM [INFORMATION_SCHEMA].[COLUMNS]
    			WHERE [TABLE_NAME] = @NomTable 
    				AND [ORDINAL_POSITION] = @lig
    			ORDER BY [ORDINAL_POSITION]
     
    			SET @lig = @lig + 1  
     
    			SET @sql = NULL
     
    			IF @TypeDonnee IN ( N'char', N'varchar', N'text')
    				SET @sql = 'SELECT * FROM ' + @NomTable + ' WHERE PATINDEX(''' + @ChaineCherchee + ''', ' + @NomColonne + ') > 0'
    			ELSE IF @TypeDonnee IN (N'nchar', N'nvarchar', N'ntext')
    				SET @sql = 'SELECT * FROM ' + @NomTable + ' WHERE PATINDEX(''' + @ChaineCherchee + ''', CAST(' + @NomColonne + ' As TEXT)) > 0'
     
    			IF @sql IS NOT NULL
    			BEGIN
    				SET @sql = 'IF EXISTS(' + @sql + ') PRINT ''[' + @NomTable + '].' + @NomColonne + ''''
    				--PRINT (@sql)
    				EXEC (@sql)
    			END
    		END
     
    		FETCH NEXT FROM Curseur_Recherche 
    		INTO @NomTable
    	END
     
    	CLOSE Curseur_Recherche
    	DEALLOCATE Curseur_Recherche
     
     
    GO
     
    SET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS ON 
    GO

  12. #12
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 779
    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 779
    Points : 52 754
    Points
    52 754
    Billets dans le blog
    5
    Par défaut
    Vous trouverez une proc pour faire ceci dans les pages que j'ai écrit sur transact SQL :
    SP_SEARCH_STRING_ANYFIELD
    SP_SEARCH_STRING_ANYFIELD_ANYTABLE

    http://sqlpro.developpez.com/cours/s...ransactsql/#L4

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

Discussions similaires

  1. Recherche dans toute une base oracle
    Par Kasanova75 dans le forum SQL
    Réponses: 1
    Dernier message: 27/07/2009, 12h26
  2. recherche dans toute la base
    Par françois35 dans le forum Modélisation
    Réponses: 1
    Dernier message: 08/09/2008, 18h53
  3. Réponses: 3
    Dernier message: 21/01/2008, 11h55
  4. Outil pour rechercher dans toutes la base
    Par ChrOnOs83 dans le forum Access
    Réponses: 4
    Dernier message: 24/01/2006, 14h49

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