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.
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
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
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.
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';
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.
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>%'
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
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.
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%'