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
| DECLARE @ValeurRecherchee VARCHAR(255) SET @ValeurRecherchee = 'toto'
---------------------------------------------------------------------
DECLARE @SQL VARCHAR(1024), -- chaîne de commande SQL
@LgValeurRecherchee INT -- longueur du mot à rechercher
SELECT @LgValeurRecherchee = LEN(@ValeurRecherchee)
SET @ValeurRecherchee = '%' + @ValeurRecherchee + '%'
-- Table qui contiendra le nombre d'occurences par table et par colonne
DECLARE @TbResultat TABLE
(
nomTable SYSNAME,
nomColonnne SYSNAME,
nbOccurences INT
)
-- Liste des tables
DECLARE curTables CURSOR FOR
SELECT name
FROM sys.tables
FOR READ ONLY
DECLARE @nomTable SYSNAME
OPEN curTables
FETCH NEXT FROM curTables INTO @nomTable
WHILE @@FETCH_STATUS = 0
BEGIN
-- Liste des colonnes de cette table
DECLARE curColonnes CURSOR FOR
SELECT COLONNES.name
FROM sys.columns COLONNES
JOIN sys.types TYPES ON TYPES.user_type_id = COLONNES.user_type_id
WHERE TYPES.name IN ('CHAR', 'VARCHAR', 'NCHAR', 'NVARCHAR')
AND OBJECT_NAME(COLONNES.object_id) = @nomTable
AND COLONNES.max_length <= @LgValeurRecherchee
ORDER BY COLONNES.column_id
FOR READ ONLY
-- Recherche du nombre d'occurences de la chaîne de caractères recherchée
DECLARE @nomColonne SYSNAME
OPEN curColonnes
FETCH NEXT FROM curColonnes INTO @nomColonne
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = 'SELECT ''' + @nomTable + ''', ''' + @nomColonne + ''''
+ ', COUNT(*) FROM ' + @nomTable +
' WHERE ' + @nomColonne + ' LIKE ''' + @ValeurRecherchee + ''''
-- Ajout du résultat
INSERT INTO @TbResultat
EXEC (@SQL)
-- Colonne suivante
FETCH NEXT FROM curColonnes INTO @nomColonne
END
DEALLOCATE curColonnes
-- Table suivante
FETCH NEXT FROM curTables INTO @nomTable
END
DEALLOCATE curTables
-- Resultat
SELECT *
FROM @TbResultat |