28 Stimmen

Wo speichert SQL Server den gespeicherten Prozedurcode?

Ich brauchte die Zeilen der gespeicherten Prozeduren einmal, um verfolgen zu können, ob ich eine Referenz auf eine Funktion, Prozedur oder Tabelle habe oder manchmal, um etwas im Code der SP zu finden.

Wo speichert SQL Server den Code der Prozedur?

46voto

KM. Punkte 98297

Verwenden Sie sys.sql_modules, weil definition nvarchar(max) ist, da es langen Code nicht abschneidet.

In INFORMATION_SCHEMA.ROUTINES ist die Spalte ROUTINE_DEFINITION nur nvarchar(4000), daher wird der Text einer langen Prozedur abgeschnitten.

Verwenden Sie dies, um nach Text in jeder Prozedur, Sicht oder Funktion zu suchen:

SELECT DISTINCT
    o.name AS Object_Name, o.type_desc
    FROM sys.sql_modules m 
        INNER JOIN sys.objects o ON m.object_id=o.object_id
    WHERE m.definition Like '%'+@Search+'%'
    ORDER BY o.type_desc, o.name 

Verwenden Sie dies, um den Text einer bestimmten Prozedur, Sicht oder Funktion anzuzeigen:

select * from sys.sql_modules where object_id=object_id('IhreProzedur')

6voto

t-bone Punkte 61

Sie können verwenden

select object_definition(object_id(routine_name)) from information_schema.routines

oder

select object_definition(object_id) from sys.objects where name = 'foo'

oder sogar

select object_definition(object_id('foo')); -- 'foo' ist der Tabellenname

Diese Versionen werden nie gekürzt.

3voto

Oded Punkte 475566

Es wurde im Systemschema in den Tabellen gespeichert:

SELECT * FROM INFORMATION_SCHEMA.ROUTINES

Siehe MSDN über die INFORMATION_SCHEMA.ROUTINES Ansicht:

ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.de/s10de_6tsql/html/c75561b2-c9a1-48a1-9afa-a5896b6454cf.htm

Für eine Inhaltsuche hierzu können Sie das Folgende tun:

SELECT * FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%Suchbegriff%'

1voto

medium Punkte 3948

Wenn Sie nur versuchen, den Code der gespeicherten Prozeduren anzuzeigen, gehen Sie in den Programmierbarkeitsordner innerhalb Ihrer DB, und sie sollten alle dort unter gespeicherten Prozeduren gespeichert sein.

1voto

Charles Boyung Punkte 2454

Wenn Sie versuchen, nach Verweisen auf andere Objekte zu suchen, können Sie eine Abfrage wie diese ausführen:

SELECT * FROM syscomments WHERE TEXT LIKE '%Suchbegriff%'

Dadurch werden alle Objekte in der Datenbank zurückgegeben, die den Suchbegriff referenzieren. Sie können dann diese Objekte überprüfen, um zu sehen, welche gespeicherten Prozeduren (sowie Ansichten und Funktionen) dies tun.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X