J'ai une énorme base de données avec 100 de tables et de procédures stockées. À l'aide de SQL Server 2005, comment puis-je obtenir une liste des procédures stockées qui effectuent une opération d'insertion ou de mise à jour sur une table donnée.Liste des procédures stockées du tableau
Répondre
select
so.name,
sc.text
from
sysobjects so inner join syscomments sc on so.id = sc.id
where
sc.text like '%INSERT INTO xyz%'
or sc.text like '%UPDATE xyz%'
Cela vous donnera une liste de tous les contenus de la procédure stockée avec INSERT ou UPDATE en eux pour une table particulière (vous pouvez évidemment modifier la requête en fonction). Des procédures plus longues seront également interrompues sur plusieurs lignes dans le jeu d'enregistrements renvoyé. Vous devrez peut-être faire un peu de recherche manuelle dans les résultats.
Modifier: Requête modifiée pour renvoyer le nom du SP. En outre, notez que la requête ci-dessus retournera toutes les fonctions UDF ainsi que les SP.
Vous pouvez essayer d'exporter toutes vos procédures stockées dans un fichier texte, puis effectuer une recherche simple.
Une technique plus avancée serait d'utiliser une recherche regexp pour trouver toutes les entrées SELECT FROM et INSERT FROM.
SELECT Distinct SO.Name
FROM sysobjects SO (NOLOCK)
INNER JOIN syscomments SC (NOLOCK) on SO.Id = SC.ID
AND SO.Type = 'P'
AND (SC.Text LIKE '%UPDATE%' OR SC.Text LIKE '%INSERT%')
ORDER BY SO.Name
This link a été utilisé comme ressource pour la recherche SP.
Cela semble fonctionner:
select
so.name as [proc],
so2.name as [table],
sd.is_updated
from sysobjects so
inner join sys.sql_dependencies sd on so.id = sd.object_id
inner join sysobjects so2 on sd.referenced_major_id = so2.id
where so.xtype = 'p' -- procedure
and is_updated = 1 -- proc updates table, or at least, I think that's what this means
Si vous téléchargez sp_search_code sur le site Web de Vyaskn il vous permettra de trouver un texte dans vos objets de base de données.
http://vyaskn.tripod.com/sql_server_search_stored_procedure_code.htm
sys.sql_dependencies
a une liste d'entités avec dépendances, y compris les tables et les colonnes qu'un sproc inclut dans les requêtes. Voir this post pour un exemple de requête qui extrait des dépendances. L'extrait de code ci-dessous obtiendra une liste des dépendances table/colonne par procédure stockée
select sp.name as sproc_name
,t.name as table_name
,c.name as column_name
from sys.sql_dependencies d
join sys.objects t
on t.object_id = d.referenced_major_id
join sys.objects sp
on sp.object_id = d.object_id
join sys.columns c
on c.object_id = t.object_id
and c.column_id = d.referenced_minor_id
where sp.type = 'P'
La [MSDN Library] (http://msdn.microsoft.com/en-us/library/ms174402.aspx) indique que cela est maintenant obsolète et doit être remplacé par sys.sql_expression_dependencies. Malheureusement, je ne peux pas obtenir l'équivalent pour travailler. Dans la requête affichée dans la réponse, d.object_id n'existe plus. J'ai essayé d.referencing_id mais cela n'a pas fonctionné non plus. Une idée de comment utiliser sql_expression_dependencies? – Drew
Sur 'sys.sql_expression_dependencies',' referencing_id' est l'élément qui référence la cible, et 'referenced_id' est la dépendance. La table a également des noms de schéma et d'entité pour les entités référencées dans la table. Les ID mineurs se réfèrent aux numéros de colonne, avec 0 indiquant aucune référence de colonne particulière. – ConcernedOfTunbridgeWells
Je pense que j'ai tout ça. Je pense que le problème est que toutes mes lignes sql_expression_dependencies ont un 0 pour referenced_minor_id. La requête analogue de sql_dependencies a retourné plusieurs lignes non nulles et je suis surpris que les résultats soient aussi différents qu'ils le sont. Il semble que sql_expression_dependencies soit beaucoup moins utile car je veux souvent voir quels sprocs référencent une colonne spécifique. Pour référence, j'ai fait un compte select (*) des deux où référencé_minor_id <> 0. Il y a 38119 lignes dans sql_dependencies, et 112 dans sql_expression_dependencies. – Drew
- 1. Liste des procédures/fonctions stockées Ligne de commande Mysql
- 2. Variables et procédures stockées
- 3. Accès aux données avec des procédures stockées
- 4. convertir des procédures stockées du serveur sql à oracle
- 5. MySql Procédures stockées Paramètre Échapper
- 6. Comment vérifier l'intégrité des procédures stockées
- 7. Développer des procédures stockées MySQL avec Intellisense?
- 8. Comment sauvegarder des procédures stockées dans MySQL
- 9. Utilisation de Linq avec des procédures stockées
- 10. Test des procédures stockées avec MySQL
- 11. Procédures sous-sonnettes et stockées
- 12. Motifs pour les procédures stockées?
- 13. SubSonic - Procédures stockées non-Crud
- 14. Comment partager des données entre des procédures stockées
- 15. Autoriser les procédures stockées d'autorisation
- 16. Entity Framework en utilisant des vues et des procédures stockées
- 17. Incorporation du code html dans les procédures stockées
- 18. Implications des performances des commentaires dans les procédures stockées SQL
- 19. Accès en lecture seule aux procédures stockées
- 20. Problème du connecteur MySQL .NET avec les procédures stockées
- 21. Générateur de procédures stockées Simple ADO.NET C#
- 22. Concurrence avec Linq To Sql Procédures stockées
- 23. Entity Framework + Sql Anywhere 11 + Procédures stockées
- 24. Procédures stockées Oracle dans SubSonic 2.2
- 25. Requêtes paramétrées SANS les procédures stockées?
- 26. Procédures stockées natives SQL Server 2005
- 27. Les procédures stockées SQL sont-elles sécurisées?
- 28. Comment trouver la liste des procédures stockées qui affectent une colonne particulière?
- 29. Valeur de mulit et procédures stockées
- 30. Modifications de version pour les procédures stockées
cela me donne l'ID SP ... puis-je atteindre le nom SP avec cet ID? – Vinodtiru
Oui, j'ai modifié la requête pour l'inclure. Je vois qu'il y a maintenant quelques autres réponses qui vous seront utiles. –
Ma réponse ici: http://stackoverflow.com/questions/119679/list-of-stored-procedure-from-table#119719 est presque identique (renvoie le nom). Cependant, je pense que Luke a raison de dire qu'il n'est pas nécessaire d'utiliser DISTINCT comme dans ma réponse –