Frage

Ich habe eine riesige Datenbank mit 100 von Tabellen und Stored Procedures. Verwenden von SQL Server 2005, wie kann ich eine Liste der gespeicherten Prozeduren erhalten, die auf einer bestimmten Tabelle ein Insert oder Update-Operation tun.

War es hilfreich?

Lösung

select
  so.name,
  sc.text
from
  sysobjects so inner join syscomments sc on so.id = sc.id
where
  sc.text like '%INSERT INTO xyz%'
  or sc.text like '%UPDATE xyz%'

Dies wird Ihnen eine Liste aller gespeicherten Prozedur Inhalte mit INSERT oder UPDATE in ihnen für eine bestimmte Tabelle (Sie können natürlich die Abfrage optimieren zu entsprechen). Auch wird mehr Verfahren über mehrere Zeilen in der zurück-Cord gebrochen werden, so müssen Sie möglicherweise ein wenig manuelle Sichtung durch die Ergebnisse tun.

Bearbeiten : Gezwickt Abfrage SP Namen als auch zurückzukehren. Beachten Sie auch, die obige Abfrage alle UDF sowie SPs zurückkehren wird.

Andere Tipps

sys.sql_dependencies hat eine Liste von Organisationen, die mit Abhängigkeiten, einschließlich Tabellen und Spalten, die eine sproc in Abfragen enthalten. Siehe diesen Beitrag für ein Beispiel einer Abfrage, die Abhängigkeiten steigt aus. Der Code-Snippet wird durch gespeicherte Prozedur eine Liste der Tabelle / Spalte Abhängigkeiten erhalten

select sp.name       as sproc_name
      ,t.name        as table_name
      ,c.name        as column_name
 from sys.sql_dependencies d
 join sys.objects t
   on t.object_id = d.referenced_major_id
 join sys.objects sp
   on sp.object_id = d.object_id
 join sys.columns c
   on c.object_id = t.object_id
  and c.column_id = d.referenced_minor_id
where sp.type = 'P'

Verwenden sys.dm_sql_referencing_entities

Beachten Sie, dass sp_depends veralteter wird.

MSDN Reference

Sie könnten versuchen, alle Ihre gespeicherten Prozeduren in eine Textdatei exportieren und dann eine einfache Suche verwenden.

Eine fortgeschrittenere Technik wäre eine regexp Suche zu verwenden, um all FROM und aus Einträgen INSERT SELECT zu finden.

Dies scheint zu funktionieren:

select
so.name as [proc],
so2.name as [table],
sd.is_updated
from sysobjects so
inner join sys.sql_dependencies sd on so.id = sd.object_id
inner join sysobjects so2 on sd.referenced_major_id = so2.id
where so.xtype = 'p' -- procedure
and is_updated = 1 -- proc updates table, or at least, I think that's what this means

Wenn Sie sp_search_code von Vyaskn-Website herunterladen wird es erlauben Sie einen beliebigen Text in Ihrer Datenbankobjekte zu finden.

http://vyaskn.tripod.com/sql_server_search_stored_procedure_code.htm

SELECT Distinct SO.Name
FROM sysobjects SO (NOLOCK)
INNER JOIN syscomments SC (NOLOCK) on SO.Id = SC.ID
AND SO.Type = 'P'
AND (SC.Text LIKE '%UPDATE%' OR SC.Text LIKE '%INSERT%')
ORDER BY SO.Name

Dieser Link als Ressource für die SP-Suche verwendet wurde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top