Trouver nom de la table dans tous les objets de toutes les bases de données
J'ai un système avec plusieurs bases de données et des applications du client. Toutes les bases de données à une instance de SQL Server. Ils ont été développés par des personnes différentes à des moments différents. Donc, si des erreurs se produisent, il est pritty difficile à trouver dans la procédure ou de déclencher des données a été modifié.
Maintenant, j'utilise ce script, que j'ai trouvé sur ce site:
SELECT DISTINCT ISNULL(sd.referenced_schema_name+'.','')+ OBJECT_NAME(sd.referenced_id)TableName,
OBJECT_NAME(sd.referencing_id)Ref_Object,
CASE WHEN OBJECTPROPERTYEX(sd.referencing_id,N'IsUserTable')= 1
THEN'Table'
WHEN OBJECTPROPERTYEX(sd.referencing_id,N'IsTableFunction')= 1
THEN'Function'
WHEN OBJECTPROPERTYEX(sd.referencing_id,N'IsTableFunction')= 1
THEN'Function'
WHEN OBJECTPROPERTYEX(sd.referencing_id,N'IsScalarFunction')=1
THEN'Function'
WHEN OBJECTPROPERTYEX(sd.referencing_id,N'IsTrigger')= 1
THEN'Trigger'
WHEN OBJECTPROPERTYEX(sd.referencing_id,N'IsView')= 1
THEN'View'
WHEN OBJECTPROPERTYEX(sd.referencing_id,N'IsUserTable')= 1
THEN'Table'
WHEN OBJECTPROPERTYEX(sd.referencing_id,N'IsProcedure')= 1
THEN'Procedure'
WHEN OBJECTPROPERTYEX(sd.referencing_id,N'IsIndexed')= 1
THEN'Index'
WHEN OBJECTPROPERTYEX(sd.referencing_id,N'IsForeignKey')= 1
THEN'ForeignKey'
WHEN OBJECTPROPERTYEX(sd.referencing_id,N'IsPrimaryKey')= 1
THEN'PrimaryKey'
END AS Ref_Object_Name
FROM sys.sql_expression_dependencies SD
INNER JOIN sys.objects obj
ON obj.object_id=sd.referenced_id
WHERE obj.is_ms_shipped= 0
and referenced_id=object_id('TABLE_NAME') /*Where one can Replace table Name*/
AND obj.type_desc='USER_TABLE'
ORDER BY TableName,Ref_Object,Ref_Object_Name
Mais ce script ne semble fonctionner que pour la base de données par le tableau appartiennent.
Je veux obtenir pour un nom de table (ou encore mieux pour un objet) de la liste de tous les objets de toutes les bases de données que le nom de la table remplies:
Database_Name SchemaName ObjectName ObjectKind
Grâce.
OriginalL'auteur Igor Borisenko | 2011-09-01
Vous devez vous connecter pour publier un commentaire.
MODIFIER
Permettra de trouver toutes les références au sein de chaque base de données, mais ne trouverez pas de croix-base de données de références. Il a fallu un peu de jeu, et la sortie n'est pas précisément ce que tu voulais, mais je pense que c'est plus explicite:
Exemple de sortie:
Mais il semble que le script ne fonctionne pas si un nom de table Database_name.schema_name.object_name rencontré dans un objet d'une autre base de données.
veuillez consulter les mises à jour de réponse de la croix-approche de base de données.
Oui, il fonctionne très bien. Je vous remercie une fois de plus. Vous avez sauvé ma journée.
OriginalL'auteur Aaron Bertrand
Cela devrait vous aider à obtenir commencé
Essentiellement, construire un tableau et l'instruction SQL que vous voulez utiliser, puis utilisez les sans-papiers sp_MSforEachdb au chargement de la table de chaque base de données
J'ai choisi un mondial de la table temporaire pour vous assurer qu'il peut en toute sécurité être accessible par la procédure stockée. on pourrait faire la même chose avec un nom de table complet à l'intérieur de la sp_MSforEachDB appel
Normal #temp table fonctionnera bien si vous insérez #t exec ... Tout un ##global n'est assurez-vous que deux personnes ne peuvent pas exécuter ce code simultanément.
Bon point sur la table temp et merci pour le lien sur sp_MSforEachDB(). Je l'utilise rarement pour des demandes ponctuelles, je crois qu'après avoir lu cet article, moi aussi, je voudrais écrire ma propre si je l'ai utilisé beaucoup...
Pour info plus de fond sur mon remplacement pour sp_MSForEachDB ici: sqlblog.com/blogs/aaron_bertrand/archive/2010/12/29/...
OriginalL'auteur Sparky
Vous pourrait ressembler à quelque chose comme sp_MSForeachdb et d'appeler la requête ci-dessus, chacune de ces bases de données.
J'étais juste en cours d'exécution avec le paresseux réponse bien que n'ayant jamais utilisé en réalité, j'étais pas au courant de la soute à bagages au-delà des sans-papiers/pris en charge.
OriginalL'auteur billinkc