Select * from * [Résolu]

Signaler
Messages postés
3
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
24 août 2010
-
Messages postés
60
Date d'inscription
lundi 4 décembre 2006
Statut
Membre
Dernière intervention
11 janvier 2013
-
Bonjour à tous,

Je cherche a faire une requête qui parcourt toute la base, et qui m'affiche le nom de la table et du champ qui contient une valeur.

j'ai déjà isolé la liste des champs dans une table temporaire avec cette requete :

select o.name as [nom_table], c.name as [nom_champ]
from sysobjects o, syscolumns c 
where o.type='U'


et j'aimerais me servir du contenu de cette table pour construire une requete du genre :

select nom_table, nom_champ
from table_temp
where nom_champ[n] = 'valeur'


Peut être en parcourant cette table avec un curseur, un fonction, je ne sais pas trop...

merci pour votre aide

5 réponses

Messages postés
3
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
24 août 2010

ok laissez tomber je vais me débrouiller autrement

vous pouvez fermer le cas.
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
118
Salut,

Je vois pas trop l'intérêt de faire cà. A quoi ca peut bien te servir de connaître la liste de toutes les valeurs entrées dans ta base ?

Je ne pense pas que ce soit possible, mais il reste la solution de faire x requêtes, une par table.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Messages postés
3
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
24 août 2010

l'intérêt pour moi c'est de retrouver dans quelle table se trouve un id, une valeur, un libellé ou autre..

je bosse sur un support applicatif et on analyse souvent des bases de données avec de nombreuses tables et des valeurs à retrouver dans l'une ou dans l'autre, trouver les correspondances, etc...

mais j'ai peut être trouvé une autre solution, mais je sais pas si c'est possible :

stocker une liste de requêtes SQL dans une table, puis les lancer une par une, en stockant leur résultat dans une table

Pouvez-vous me dire comment vous vous y prendriez ?

merci !!
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
118
Salut,

Normalement, lorsque tu recherche un id par exemple, tu sais dans quelle table le trouver. Je vois pas l'intérêt de parcourir TOUTES les données de TOUTES les tables uniquement pour trouver un id. A moins de faire un projet générique qui doit chercher une valeur dans une base de données totalement inconnue, je n'en vois pas vraiment l'intérêt.

Prenant le cas d'une base qui représente un garage par exemple, si tu cherche la facture de la réparation d'une citroën C4 de couleur rouge d'un client, je vous pas pourquoi tu devrais regarder dans la table des pneus en stock, tu sais déjà qu'il faut regarder dans la table des voitures.

Regrouper toutes les données de toutes les tables dans une seule table, qui ne sera donc pas indexée, tout cà pour faire une recherche, tu vas flinguer ton serveur de base de données si tu as beaucoup de données !
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Messages postés
60
Date d'inscription
lundi 4 décembre 2006
Statut
Membre
Dernière intervention
11 janvier 2013

Bonjour,
J'arrive un peut tard, mais voici ce que je ferai.
C'est une petite procédure stocké qui attend une variable que l'on veux rechercher dans toutes la base de données.

Si ça peut t'aider :

create procedure RechercheChamp
@recherche varchar(255)
as

    DECLARE tnames_cursor CURSOR
    FOR
    select name from sysobjects o where o.type='U'
    OPEN tnames_cursor
    DECLARE @name sysname
    FETCH NEXT FROM tnames_cursor INTO @name
    WHILE (@@FETCH_STATUS <> -1)
    BEGIN
    -------------------+
        declare @requete varchar (8000)
        set @requete='SELECT * FROM '+@name+' where '

        declare @requeteFiltre varchar (8000)
        set @requeteFiltre=''
       
        DECLARE tnames_cursorFiltre CURSOR
        FOR
        SELECT   COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=@name
        OPEN tnames_cursorFiltre
        DECLARE @COLUMN_NAME sysname
        FETCH NEXT FROM tnames_cursorFiltre INTO @COLUMN_NAME
        WHILE (@@FETCH_STATUS <> -1)
        BEGIN
        -------------------
            if @requeteFiltre<>''
                set @requeteFiltre= @requeteFiltre+ ' OR '

            set @requeteFiltre  = @requeteFiltre + 'convert(varchar(255),'+@COLUMN_NAME+') like ''%'+@recherche+'%''';


        -------------------
        FETCH NEXT FROM tnames_cursorFiltre INTO @COLUMN_NAME
        END
        CLOSE tnames_cursorFiltre
        DEALLOCATE tnames_cursorFiltre

        exec (@requete + @requeteFiltre)

    -------------------
    FETCH NEXT FROM tnames_cursor INTO @name
    END
    CLOSE tnames_cursor
    DEALLOCATE tnames_cursor 



Qui ne tente rien, n'a rien