webentwicklung-frage-antwort-db.com.de

Identifizieren aller gespeicherten Prozeduren, die auf eine bestimmte Tabelle verweisen

Ich habe zu Testzwecken eine Tabelle zur Entwicklungsumgebung erstellt, und es gibt wenige SPs, die diese Tabelle neu belegen. Jetzt muss ich diese Tabelle löschen und alle SPs identifizieren, die auf diese Tabelle verweisen. Ich habe Schwierigkeiten, eine Liste aller SPs zu finden. Bitte schlagen Sie eine Abfrage vor, indem Sie davon ausgehen, dass der Tabellenname 'x' und die Datenbank SQL Server 2005 ist.

100
DJay
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%TableNameOrWhatever%'

BTW - hier ist eine praktische Ressource für diese Art von Frage: Abfrage des SQL Server-Systemkatalogs FAQ

187
Chains

Folgendes funktioniert auf SQL2008 und höher. Stellt eine Liste mit gespeicherten Prozeduren und Funktionen bereit.

select distinct [Table Name] = o.Name, [Found In] = sp.Name, sp.type_desc
  from sys.objects o inner join sys.sql_expression_dependencies  sd on o.object_id = sd.referenced_id
                inner join sys.objects sp on sd.referencing_id = sp.object_id
                    and sp.type in ('P', 'FN')
  where o.name = 'YourTableName'
  order by sp.Name
24
Guy Hollington

Eine Abfrage ohne Abfrage wäre die Verwendung des SQL Server Management Studio.

Suchen Sie die Tabelle, klicken Sie mit der rechten Maustaste und wählen Sie "Abhängigkeiten anzeigen".

EDIT

Aber wie die Kommentatoren sagten, ist es nicht sehr zuverlässig.

15
Hans Kesting

manchmal führen obige Abfragen nicht zu einem korrekten Ergebnis. Es ist eine integrierte Prozedur vorhanden, mit der die Abhängigkeiten der Tabelle abgerufen werden können:

EXEC sp_depends @objname = N'TableName';
14
Pramod Pawar
SELECT
    o.name
FROM
    sys.sql_modules sm
INNER JOIN sys.objects o ON
    o.object_id = sm.object_id
WHERE
    sm.definition LIKE '%<table name>%'

Denken Sie jedoch daran, dass dadurch auch SPs angezeigt werden, bei denen der Tabellenname in den Kommentaren enthalten ist oder wenn der Tabellenname eine Unterzeichenfolge eines anderen Tabellennamens ist, der verwendet wird. Wenn Sie beispielsweise Tabellen mit den Namen "test" und "test_2" haben und versuchen, mit "test" nach SPs zu suchen, erhalten Sie Ergebnisse für beide.

5
Tom H

Die folgende Abfrage ruft alle gespeicherten Prozedurnamen und die entsprechende Definition dieser SPs ab

select 
   so.name, 
   text 
from 
   sysobjects so, 
   syscomments sc 
where 
   so.id = sc.id 
   and UPPER(text) like '%<TABLE NAME>%'
5
Deepak Kothari

Die folgende Abfrage funktioniert nur, wenn Sie nach Abhängigkeiten für eine Tabelle und nicht nach einer Spalte suchen:

EXEC sp_depends @objname = N'TableName';

Die folgende Abfrage ist jedoch die beste Option, wenn Sie nach Abhängigkeiten aller Art suchen möchten und nichts verpassen. Es gibt tatsächlich mehr Informationen als erforderlich.

 select distinct
        so.name
        --, text 
  from 
       sysobjects so, 
       syscomments sc 
  where 
     so.id = sc.id 
     and lower(text) like '%organizationtypeid%'
  order by so.name
5
Siraj Ansari
SELECT DISTINCT OBJECT_NAME(OBJECT_ID),
object_definition(OBJECT_ID)
FROM sys.Procedures
WHERE object_definition(OBJECT_ID) LIKE '%' + 'table_name' + '%'

GO

Dies funktioniert, wenn Sie den Tabellennamen angeben müssen.

2
ric

Im Management Studio können Sie einfach mit der rechten Maustaste auf die Tabelle klicken und auf "Abhängigkeiten anzeigen" klicken. enter image description here

dann sehen Sie eine Liste von Objekten, die Abhängigkeiten zu Ihrer Tabelle haben: enter image description here

0
nzrytmn

Versuche dies 

   SELECT DISTINCT so.name
    FROM syscomments sc
    INNER JOIN sysobjects so ON sc.id=so.id
    WHERE sc.TEXT LIKE '%your table name%'
0
Pooja Chavan