2009-03-23 11 views

Antwort

4

Dieser Artikel auf TechRepublic

Finding dependencies in SQL Server 2005

beschreibt eine Möglichkeit, das zu tun:

Dieses Tutorial zeigt, wie Sie kann schreiben Sie eine Prozedur, die alle Objekte, die auf andere Objekte abhängig sind.

Hier ist der Code das System gespeicherte Prozedur zum Auffinden von Objektabhängigkeiten zu erstellen: mit Rekursion Spaziergang durch die Abhängigkeitskette

USE master 
GO 
CREATE PROCEDURE sp_FindDependencies 
(
     @ObjectName SYSNAME, 
     @ObjectType VARCHAR(5) = NULL 
) 
AS 
BEGIN 
    DECLARE @ObjectID AS BIGINT  

     SELECT TOP(1) @ObjectID = object_id 
     FROM sys.objects 
     WHERE name = @ObjectName 
     AND type = ISNULL(@ObjectType, type)  

    SET NOCOUNT ON ;  

     WITH DependentObjectCTE (DependentObjectID, DependentObjectName, ReferencedObjectName, ReferencedObjectID) 
     AS 
     (
     SELECT DISTINCT 
       sd.object_id, 
       OBJECT_NAME(sd.object_id), 
       ReferencedObject = OBJECT_NAME(sd.referenced_major_id), 
       ReferencedObjectID = sd.referenced_major_id 
     FROM  
       sys.sql_dependencies sd 
       JOIN sys.objects so ON sd.referenced_major_id = so.object_id 
     WHERE 
       sd.referenced_major_id = @ObjectID 
     UNION ALL 
     SELECT 
       sd.object_id, 
       OBJECT_NAME(sd.object_id), 
       OBJECT_NAME(referenced_major_id), 
       object_id 
     FROM  
       sys.sql_dependencies sd 
      JOIN DependentObjectCTE do ON sd.referenced_major_id = do.DependentObjectID  
     WHERE 
       sd.referenced_major_id <> sd.object_id  
     ) 
     SELECT DISTINCT 
       DependentObjectName 
     FROM 
       DependentObjectCTE c 
END 

Dieses Verfahren verwendet eine Common Table Expression (CTE) um zu allen Objekten zu erhalten, die sind, abhängig von dem Objekt, das in dem Verfahren übergeben wird. Die Hauptquelle der Daten stammt aus der Systemsicht sys.sql_dependencies, die Abhängigkeitsinformationen für alle Ihre Objekte in der Datenbank enthält.

2

sp_depends Versuchen Sie, obwohl Sie wahrscheinlich die gespeicherte Prozedur neu kompiliert werden sollen, die Statistiken in der Datenbank zu aktualisieren.

1

Nachschlagen sp_depends System gespeichert proc.

0

Ich denke, solange die gespeicherte Prozedur und die Tabellen alle in der gleichen Datenbank sind, dann können Sie mit der rechten Maustaste auf die Prozedur in SSMS klicken und auf "Abhängigkeiten anzeigen" klicken. Ich weiß nicht, die Abfrage hinter dem Dialog aber ...

0

Wie andere angegeben haben, können Sie die gespeicherten Prozeduren von Dependancy verwenden; Nach meiner Erfahrung und dem SQL Server 2000 waren die Dependenzen jedoch nicht immer zuverlässig. In einigen Fällen wurden sie nicht aktualisiert. Sie können immer zur sysComments-Tabelle wechseln, wenn Ihr Schema nicht verschlüsselt ist.

declare @crlfSearch varchar(max),@objectSearch varchar(max),@escapeSearch varchar(max) 

set @crlfSearch=('%bid' + char(13)+'%') 
set @objectSearch='%bid %' 
set @escapeSearch ='%[[]Bid]%' 
select distinct so.name 
from syscomments sc 
inner join sysobjects so 
on sc.id=so.id 
where text like @objectSearch or text like @crlfSearch 
or text like @escapesearch 

Diese Abfrage sucht nach drei gemeinsamen Fällen finden Sie einige hinzufügen, aber im Grunde finden wir, wo der Tabellenname ein Leerzeichen hinter sich hat, (Dies hilft, Fälle zu beschränken, in denen der Tabellenname Teil eines anderen Tabellenname), Hat eine Rückkehr am Ende davon, oder ist in Klammern entkommen.

Verwandte Themen