Bonjour,
J'ai une base de données ayant plusieurs table de dans.
J'ai une valeur (type string), et je veux trouver à quelle table ma valeur appartient
Comment je dois faire ?
Merci
Bonjour,
J'ai une base de données ayant plusieurs table de dans.
J'ai une valeur (type string), et je veux trouver à quelle table ma valeur appartient
Comment je dois faire ?
Merci
... Bonne chance ...
Si tu n'as pas la moindre idée du nom de la table ni même du nom du champs, tu vas être obligé de scanner toute ta DB; table par table et champs par champs.
SQL Server permet de retrouver via une table système la liste des tables et la liste des champs. Avec un peu de scripting, tu peux écrire une boucle là-dessus.
Peux-tu nous en dire un peu plus sur le but précis de ce besoin étrange qui équivaut à rechercher dans quels ouvrages de la Bibliothèque de France se trouve le mot 'avoir' ?
Tu n'as pas précisé l'environnement sur lequel tu travailles.
Je travaille sur Visual C#
MySql server
Je ne connais ni l'un ni l'autre
Vu le manque de proposition, je vais te proposer une solution qui n'est sans doute pas la plus efficace, mais qui a le mérite d'exister
Le principe serait de choper dans les tables systeme la liste des table de ta DB (sous Oracle : user_tables ou all_tables avec condition sur le owner selon le besoin, pas besoin de récupérer les tables system par exemple), puis la liste de colonne de chacune des tables (sous Oracle : all_tab_columns ou user_tab_columns) pour lancer pour chaque colonne de chaque table des requetes de type "insert into table_test values (latable, lacolonne, (select count(*) from latable where lacolonne = 'valeur_cherchee'))", et selectionner à la fin dans cette table de test les count > 0.
En pl/sql, j'aurai pu t'en dire plus, mais pas en C#/Mysql.
j'ai fait ceci en Transact SQL dans mes papiers :
http://sqlpro.developpez.com/cours/s...r/transactsql/
SP_SEARCH_STRING_ANYFIELD
basez vous dessus (en plus MySQL utilise les vues d'info de schéma).
Ajoutez la lecture de toutes les bases.
A +
Ci-dessous un bout de code pour SQL Server que j'ai écris et qui permet de retrouver chaque table possédant un champs ayant le mot cléf (voir variable SearchPattern) dans son nom. En t'inspirant de ce code, tu pourrais peut-être l'adapter pour ton besoin.
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 -- Scan the entire database and look up in every tables if the -- table has a field with a specific keyword in his name DECLARE @SearchPattern VARCHAR(64) DECLARE @sql VARCHAR(1024) DECLARE @TableName VARCHAR(64) DECLARE @FieldName VARCHAR(64) -- Type here below the pattern that you wish to retrieve SET @SearchPattern = 'FldName' DECLARE TABLES CURSOR FOR SELECT o.name, c.name FROM syscolumns c INNER JOIN sysobjects o ON c.id = o.id WHERE o.type = 'U' ORDER BY o.name, c.name OPEN TABLES FETCH NEXT FROM TABLES INTO @TableName, @FieldName WHILE @@FETCH_STATUS = 0 BEGIN IF CHARINDEX (@SearchPattern, @FieldName) >0 PRINT 'Table ' + @TableName + ' has a field called ''' + @FieldName + '''' FETCH NEXT FROM TABLES INTO @TableName, @FieldName END CLOSE TABLES DEALLOCATE TABLES
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager