2012-06-27 6 views
2

Je ne sais pas grand-chose sur le monde de MS, mais maintenant il arrive à être que je dois utiliser SQL Server Management Studio 2008.dépendances de procédures stockées dans SQL Server Management Studio

Mon problème: J'ai une colonne dans une table, et j'ai besoin de voir toutes les procédures stockées qui peuvent agir sur elle.

J'ai essayé de faire un clic droit et d'aller sur 'Dépendances de vue' mais cela ne semble pas retourner tout ce qu'il devrait être.

Des questions comme celle-ci: SQL Server Dependencies ont des réponses qui offrent 3 types de solutions

  1. outils tiers payant.
  2. Écrire vos propres scripts.
  3. Exportation de tout dans des fichiers texte et remplissage.

WTF? Est-ce que je manque quelque chose d'évident? Est-ce vraiment ainsi que les choses fonctionnent? J'imagine que c'est un cas d'utilisation très commun: vous voulez modifier la table et vous voulez vous assurer que vous ne casserez rien. Ou si vous regardez un nouveau projet avec une base de données pour la première fois et que vous voulez voir comment certaines colonnes sont remplies avec des procédures stockées. N'y a-t-il pas de workflow intégré rapide et facile pour cela?

+0

Oui, les options sont correctes. Que faire si un proc stocké utilise SQL dynamique - il ne serait pas vraiment identifié comme une dépendance à moins que l'outil ne cherche que le nom de la colonne dans tout le texte d'un proc, ce qui conduirait à des faux positifs, etc –

+0

Ok, merci. C'est imprudent, je sens que quelque chose serait mieux que rien. – MrFox

+0

Vous devrez également peut-être mettre à jour pour résoudre les dépendances manquantes: Voir ici - http://activ8nz.com/Blog/professional/post/2010/11/01/resolving-missing-dependencies-in-sql-server.aspx –

Répondre

7

Si vous avez besoin de trouver des objets de base de données (par exemple, des tables, des colonnes, triggers) par son nom - un coup d'oeil à la GRATUIT outil Red-Gate appelé SQL Search qui le fait - il recherche votre base de données pour tout type de chaîne (s).

enter image description here

enter image description here

Il est un outil indispensable pour tout développeur de DBA ou base de données - ai-je mentionné déjà il est absolument GRATUIT à utiliser pour tout type d'utilisation ??

+1

SQL Search est GRAND - l'un des meilleurs moyens de trouver rapidement toutes les références à quelque chose dans votre DB +1 de moi! – Charleh

+1

Merci, cela va résoudre mon problème. Je suis toujours étonné que Microsoft n'a pas seulement inclus cette fonctionnalité dans leur produit. – MrFox

+0

@suslik: nous avons la chance qu'il existe des fournisseurs d'outils tiers comme Red-Gate qui remplissent ces "trous" - et si c'est gratuit, c'est encore mieux! :-) –

0

Je me demande pourquoi vous ne pouvez pas voir les dépendances via la boîte de dialogue 'Voir les dépendances' parce que cela fonctionne parfaitement bien pour moi. Néanmoins, vous pouvez interroger la vue système 'sys.sql_expression_dependencies' et obtenir les informations de dépendance souhaitées.

Exemple

SELECT OBJECT_NAME(referencing_id),OBJECT_NAME(referenced_id) 
FROM sys.sql_expression_dependencies 
WHERE referenced_id = OBJECT_ID('XXX') 

Vous pouvez d'un projet de cours d'autres informations que vous pourriez avoir besoin.

+0

se demander ce qui a causé le downvote! – alwayslearning

+0

Ce n'est pas ce que fait 'View Dependencies'. –

+0

@David - Voici ce que dit msdn à propos de 'View Dependencies' - * Les dépendances d'objet (page générale) de l'objet courant listent à la fois les objets de base de données devant être présents pour que l'objet fonctionne correctement et les objets dépendants msdn suggère en outre d'interroger l'affichage que j'ai mentionné http://msdn.microsoft.com/fr-fr/library/ms345449(SQL.105).aspx – alwayslearning

1

Utilisez cette requête:

SELECT ROUTINE_NAME, ROUTINE_DEFINITION 
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE ROUTINE_DEFINITION LIKE '%YOUR COLUMN %' 
AND ROUTINE_TYPE='PROCEDURE' 
1

J'ai passé une bonne quantité de temps à essayer de trouver un moyen d'identifier les dépendances au niveau de la colonne d'une manière rapide sans avoir à rechercher du texte ou utiliser des applications tierces. L'autre défi consiste à trouver des dépendances entre plusieurs bases de données où les noms de tables peuvent se répéter, ce qui provoquera des faux positifs lors de la recherche de texte SP.

Depuis SQL 2008, il existe une fonction qui renvoie les dépendances entre les bases de données au niveau du champ.

Le code ci-dessous fonctionne à quelques exceptions près:

  • Il échouera si des procédures stockées avec des références non valides sur les tables/champs qui ont été supprimés (Soit dit en passant, je trouve que cela est utile pour trouver SPs que avait été accidentellement cassé par des modifications de table).
  • Il ne trouve pas toutes les dépendances dans les cas où le SP utilise des tables temporaires de manière inhabituelle.
  • Dans certains cas, j'ai trouvé qu'il renvoyait des faux positifs pour les procédures stockées complexes.

MSDN Documentation

Ce code doit être exécuté à partir de la base de données où le SP est afin de pouvoir passer à d'autres dépendances de bases de données.

SELECT  
--SP, View, or Function 
ReferencingName = o.name, 
ReferencingType = o.type_desc, 

--Referenced Field 
ref.referenced_database_name, --will be null if the DB is not explicitly called out 
ref.referenced_schema_name, --will be null or blank if the DB is not explicitly called out 
ref.referenced_entity_name, 
ref.referenced_minor_name 

FROM sys.objects AS o 
cross apply sys.dm_sql_referenced_entities('dbo.' + o.name, 'Object') ref 
where o.type in ('FN','IF','V','P','TF') 
Questions connexes