Bonjour à tous, je m'adresse à vous car je bosse sous sql serveur 2000 et mon patron m'a demandé de développer un bout de code en transact sql dont le but est de lister tous les endroits d'une base (tables + colonnes) où se trouve une occurence.

Hors moi, en transact sql c'est pas sa. SQL pourquoi pas mais c'est mon premier travail à plein temps (depuis 3 mois) et Transact SQL je comprends une fois qu'il est écrit mais de là à le taper moi même ya une marge.

C'est pourquoi j'ai fortement besoin de votre aide.

J'ai récupéré un code qui m'a l'air d'être mieux que pas mal (voir plus bas ou http://sqlpro.developpez.com/cours/s...r/transactsql/
-- paragraphe 4.3)

Maintenant, j'aimerais savoir ce que j'en fais de ce code. Ma coupable ignorance m'a poussé jusqu'à le copier coller dans une procédure stockée au sein de ma base et de l' exécuter bien sur. Donc, le seul résultat que j'en ai obtenu est "la ou les commande(s) ont réussi".Cool, sa me fais une belle jambe (bien que j'en déduise que la syntaxe doit pas être pourrie).

Donc, si quelqu'un pouvais m'éclairer, m'orienter ou même confirmer/infirmer que ce code correspond à ce que je recherche, en bref répondre, ce serait super cool de sa part.

Sur ce, bonne journée les développeurs.

voivi le code en question:

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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
 SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS OFF 
GO
 
/*---------------------------------------------------\
| recherche d'une occurrence de mot dans n'importe     |
| quelle colonne de type caractères de n'importe       |
| quelle table de la base de données                   | 
|----------------------------------------------------- |
| Frédéric BROUARD - COMMUNICATIC SA - 2001-12-18      |
 \-------------------------------------------------- */
 
ALTER     PROCEDURE SP_SEARCH_STRING_ANYFIELD_ANYTABLE
                 @SearchWord Varchar(32)      -- mot recherché
 
AS 
 
DECLARE @ErrMsg VARCHAR(128),
        @TableName Varchar(128),   -- nom de la table passé en argument
        @ColumnList1 VARCHAR(2000),-- liste des colonnes pour clause SELECT
        @ColumnList2 VARCHAR(2000),-- liste des colonnes pour clause WHERE
        @SQL         VARCHAR(5000) -- requête dynamique 
 
IF @TableName IS NULL OR @SearchWord IS NULL
RAISERROR ('Paramètres NULL impossible à traiter', 16, 1)
IF @@ERROR <> 0 GOTO LBL_ERROR
 
-- test d'existence de la table
IF NOT EXISTS(SELECT *
              FROM   INFORMATION_SCHEMA.tables 
              WHERE  TABLE_NAME = @TableName)
RAISERROR ('Références de table inconnue %s', 16, 1, @TableName)
IF @@ERROR <> 0 GOTO LBL_ERROR
 
Declare @ColumnList varchar(1000)   -- liste des noms de colonnes dans 
                                    -- lesquels la recherche va s'effectuer 
 
-- obtention de la liste des colonnes pour la requête de recherche
SELECT @ColumnList = COALESCE(@ColumnList + ' + COALESCE(', 'COALESCE(') + column_name +', '''')'
FROM   INFORMATION_SCHEMA.COLUMNS
WHERE  TABLE_NAME = @TableName
  AND  DATA_TYPE LIKE '%char%'
 
IF @ColumnList IS NULL
RAISERROR ('Aucune colonne de recherche trouvé dans la table %s',
           16, 1, @TableName)
IF @@ERROR <> 0 GOTO LBL_ERROR
 
PRINT 'INFO - @ColumnList value is : ' + @ColumnList
 
-- assemblage du texte de la requête de recherche 
Set @SQL = 
   'SELECT * FROM '+ @TableName 
 + ' WHERE '       + @ColumnList 
 + ' LIKE ''%'     + @SearchWord +'%'''
 
PRINT 'INFO - @SQL value is : ' + @SQL
 
-- exécution de la requête de recherche
Exec (@SQL)
 
RETURN
 
--------------------------------------------------------------------------------------
-- effet de bord 1 : pas de mot passé
IF @SearchWord IS NULL
BEGIN
   SET @ErrMsg = 'Impossible de traiter cette recherche avec un argument NULL'
   GOTO LBL_ERROR 
END
 
-- effet de bord 2 : mot vide passé
IF @SearchWord = ''
BEGIN
   SET @ErrMsg = 'Impossible de traiter cette recherche avec un argument vide'
   GOTO LBL_ERROR 
END
 
-- effet de bord 3 : mot contenant un caractère joker % du LIKE
IF CHARINDEX('%', @SearchWord) > 0
BEGIN
   SET @ErrMsg = 'Impossible de traiter cette recherche avec un argument contenant un caractère %'
   GOTO LBL_ERROR 
END
 
-- effet de bord 4 : mot contenant un caractère joker _ du LIKE
IF CHARINDEX('_', @SearchWord) > 0
BEGIN
   SET @ErrMsg = 'Impossible de traiter cette recherche avec un argument contenant un caractère _'
   GOTO LBL_ERROR 
END
 
-- curseur parcourant toutes les tables
DECLARE CurTables CURSOR
FOR 
   SELECT DISTINCT TABLE_NAME
   FROM   INFORMATION_SCHEMA.tables
   WHERE  TABLE_TYPE = 'BASE TABLE'
     AND  TABLE_NAME IS NOT NULL
-- en cas d'erreur
IF @@Error <> 0
BEGIN
   SET  @ErrMsg = 'Erreur dans la recherche de la liste des tables concernées'
   GOTO LBL_ERROR 
END
 
-- ouverture du cuseur
OPEN CurTables
 
-- lecture de la première ligne de l'ensemble de résultat
FETCH CurTables INTO @TableName
 
-- la lecture est-elle correcte ? Oui, on boucle !
WHILE @@Fetch_Status = 0
BEGIN
 
-- les variables contenant les listes des colonnes sont initialisée à vide
   SET @ColumnList1 = ''
   SET @ColumnList2 = ''
 
-- construction des listes
   SELECT @ColumnList1 = @ColumnList1 + COLUMN_NAME+', ',
          @ColumnList2 = @ColumnList2 + 'COALESCE('+COLUMN_NAME+', '''') + '
   FROM   INFORMATION_SCHEMA.COLUMNS
   WHERE  TABLE_NAME = @tableName
     AND  DATA_TYPE LIKE '%char%'
 
-- pas de colonnes cible pour la recherche, on lit l'enregistrement suivant et on boucle
   IF @ColumnList1 = ''
   BEGIN
      FETCH CurTables INTO @TableName
      CONTINUE
   END
 
-- suppression du dernier caractère parasite des listes de colonne 
   SET @ColumnList1 = SUBSTRING(@ColumnList1, 1, LEN(@ColumnList1) - 1)
   SET @ColumnList2 = SUBSTRING(@ColumnList2, 1, LEN(@ColumnList2) - 1)
 
-- création de la requête de recherche de l'ensemble des occurences
   SET @SQL = 'SELECT ' +@ColumnList1
            +' FROM '   +@TableName
            +' WHERE '  +@ColumnList2
            +' LIKE ''%'+@SearchWord+'%'''
 
-- exécution de la requête de recherche des occurences
   EXEC(@SQL)
 
-- lecture de la ligne suivante
   FETCH CurTables INTO @TableName
END
 
-- fermeture du curseur
CLOSE CurTables
 
-- libération de l'espace mémoire
DEALLOCATE CurTables
 
PRINT '*** RECHERCHE de l''occurence '+@SearchWord+ ' dans toute la base terminée ***'
 
RETURN
 
-- gestion des erreurs
LBL_ERROR:
PRINT 'ERREUR LORS DE L''EXÉCUTION DE LA PROCÉDURE STOCKÉE SP_SEARCH_STRING_ANYFIELD'
 
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO