Contains() et les tables Information_schema
Bonjour,
J'ai sur ma base de données beaucoup de procédures stokées (2500 environ) et je voudrai savoir quelles sont les procédures qui font des inserts, des deletes, des updates.
J'ai pensé à utiliser les tables systèmes comme suit :
Code:
1 2 3 4 5 6 7 8 9
| select
routine_name,
routine_definition
from
information_schema.routines
where
routine_type='PROCEDURE'
order by routine_name |
ce qui me sort la liste des procédures avec leur définition. Je voudrai éviter de me taper toutes ces procédure a la main et faire directement un contains() sur la définition ma procédure pour avoir un résultat rapide et complètement sûr.
J'ai donc modifié ma requête comme cela :
Code:
1 2 3 4 5 6 7 8 9
| select
routine_name,
routine_definition
from
information_schema.routines
where
routine_type='PROCEDURE'
and contains(routine_definition,' delete ')
order by routine_name |
mais j'obtiens l'erreur suivante :
Code:
1 2
| Msg*7601, Niveau*16, État*2, Ligne*1
Impossible d'utiliser le prédicat CONTAINS ou FREETEXT sur table ou vue indexée 'information_schema.routines', car il n'y a pas d'index de texte intégral. |
Est-ce que quelqu'un à une idée pour contourner le problème?
Attention aux procédures de plus de 4000 caractères !
Bonsoir,
information_schema.routines.routine_definition est un nvarchar(4000),
si vous avez des procédures stockées de plus de 4000 caractères, il est possible que vous ne trouviez pas toutes les références que vous cherchez, puisque seul
le début de votre procédure stockée pourra être stocké dans 4000 caractères.
Sous 2005, 2008. Utilisez plutôt sys.sql_modules.definition qui est de type nvarchar(max)
@+