(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 !
(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 !
select obj.name from syscolumns col
join sysobjects obj on obj.id=col.id
where col.name like '%developpez.com%'
A+
serge
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"
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
Il me met une erreur de type
je vais essayer de changer des parametres
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.
Envoyé par Poisson59
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.
J'ai bien les text mais pas les ntext ???
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
ok ca à l'air de marché
en plus j'ai rajouter un parametre à la procedure
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 !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 CREATE PROCEDURE MAPROC @SearchWord Varchar(32) -- mot recherché AS ....
![]()
![]()
![]()
![]()
![]()
![]()
![]()
De rien.Envoyé par Poisson59
Par contre, oeux-tu poster l'intégralité de ta proc ?
ok
voici l'intégral de la Procédure
@ + ZZ
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
Partager