it-swarm.com.de

Fragen Sie den Inhalt gespeicherter Prozeduren in SQL Server ab

Ich erforsche ein altes Datenbanksystem und habe sehr wenig Kenntnisse über seine internen Daten. Ich möchte alle gespeicherten Prozeduren finden, die eine andere gespeicherte Prozedur A aufrufen.

Wie mache ich das am besten?

Kann ich etwas wie diesen Pseudocode schreiben:

select name from AllStoredProcedures as Asp where Asp.TextualContent contains 'A'

Asp.TextualContent steht für die tatsächliche, im SP enthaltene SQL.

26
Ben
SELECT
    OBJECT_NAME(OBJECT_ID),
    definition
FROM
    sys.sql_modules
WHERE
    objectproperty(OBJECT_ID, 'IsProcedure') = 1
AND definition LIKE '%Foo%' 
47
Martin Smith

Für SQL Server 2005/2008:

SELECT  s.name SchemaName
        ,o.name RoutineName
        ,o.[type] RoutineType
        ,procs.*
FROM    sys.sql_modules procs
INNER JOIN sys.objects o ON procs.object_id = o.object_id 
INNER JOIN sys.schemas s ON o.schema_id = s.schema_id
WHERE   procs.[definition] LIKE '%A%'
--AND       o.[type] = 'P' --'P' for stored procedures
6
Bogdan Sahlean

Diese Abfrage ruft die Textdefinition der gespeicherten Prozeduren ab und filtert sie mit einem einfachen Platzhalter.

Für 2000 (nicht getestet, aber IIRC ist die richtige Tabelle):

select p.[type]
      ,p.[name]
      ,c.[text]
  from sysobjects p
  join syscomments c
    on p.object_id = c.id
 where p.[type] = 'P'
   and c.[text] like '%foo%'

Für 2005:

select p.[type]
      ,p.[name]
      ,c.[text]
  from sys.objects p
  join sys.syscomments c
    on p.object_id = c.id
 where p.[type] = 'P'
   and c.[text] like '%foo%'

Für 2005 und 2008+

select p.[type]
      ,p.[name]
      ,c.[definition]
  from sys.objects p
  join sys.sql_modules c
    on p.object_id = c.object_id
 where p.[type] = 'P'
   and c.[definition] like '%foo%'

Versuchen Sie es mit nur einer Aussage.

SELECT OBJECT_DEFINITION(OBJECT_ID(N'dbo.myStoredProc'))

oder

SELECT @objname= OBJECT_DEFINITION(OBJECT_ID(N'dbo.myStoredProc'))
print @objname
1
Apps Tawale