wake-up-neo.com

Gespeicherte Prozedur nach Namen suchen

Gibt es eine Möglichkeit, eine in SQL Server Management Studio gespeicherte Prozedur anhand des Namens oder eines Teils des Namens zu finden? (im aktiven Datenbankkontext)

Danke für die Hilfe

63
gruber

Sie können verwenden:

select * 
from 
   sys.procedures 
where 
   name like '%name_of_proc%'

wenn Sie den Code benötigen, können Sie in der Tabelle syscomments nachschauen

select text 
from 
    syscomments c
    inner join sys.procedures p on p.object_id = c.object_id
where 
    p.name like '%name_of_proc%'

Update bearbeiten:

sie können auch die ANSI-Standardversion verwenden

SELECT * 
FROM 
    INFORMATION_SCHEMA.ROUTINES 
WHERE 
    ROUTINE_NAME LIKE '%name_of_proc%'
109
Preet Sangha

Angenommen, Sie befinden sich in den Details des Objekt-Explorers (F7Klicken Sie auf die Schaltfläche Filter, um die Liste der gespeicherten Prozeduren anzuzeigen, und geben Sie den Namen (oder einen Teil des Namens) ein.

alt text

39
Codesleuth

Dies funktioniert auch für Tabellen und Ansichten (nicht nur für Sprocs) (unter anderem):

SELECT
    '[' + s.name + '].[' + o.Name + ']',
    o.type_desc
FROM
    sys.objects o
    JOIN sys.schemas s ON s.schema_id = o.schema_id
WHERE
    o.name = 'CreateAllTheThings' -- if you are certain of the exact name
    OR o.name LIKE '%CreateAllThe%' -- if you are not so certain

Es gibt auch den Schemanamen an, der für jede nicht triviale Datenbank nützlich ist (z. B. eine Datenbank, in der Sie eine Abfrage benötigen, um eine gespeicherte Prozedur anhand ihres Namens zu finden).

5
nathanchere

Sie können diese Abfrage verwenden:

SELECT 
    ROUTINE_CATALOG AS DatabaseName ,
    ROUTINE_SCHEMA AS SchemaName,
    SPECIFIC_NAME AS SPName ,
    ROUTINE_DEFINITION AS SPBody ,
    CREATED AS CreatedDate,
    LAST_ALTERED AS LastModificationDate
FROM INFORMATION_SCHEMA.ROUTINES
WHERE 
    (ROUTINE_DEFINITION LIKE '%%')
    AND 
    (ROUTINE_TYPE='PROCEDURE')
    AND
    (SPECIFIC_NAME LIKE '%AssessmentToolDegreeDel')

Wie Sie sehen, können Sie auch innerhalb des gespeicherten Verfahrens suchen.

1

Wenn ich einen Store Procedure-Namen habe und nicht weiß, zu welcher Datenbank er gehört, verwende ich Folgendes:

Use [master]
GO

DECLARE @dbname VARCHAR(50)   
DECLARE @statement NVARCHAR(max)

DECLARE db_cursor CURSOR 
LOCAL FAST_FORWARD
FOR  
--Status 48 (mirrored db)
SELECT name FROM MASTER.dbo.sysdatabases WHERE STATUS NOT LIKE 48 AND name NOT IN ('master','model','msdb','tempdb','distribution')  

OPEN db_cursor  
FETCH NEXT FROM db_cursor INTO @dbname  
WHILE @@FETCH_STATUS = 0  
BEGIN  

SELECT @statement = 'SELECT * FROM ['[email protected]+'].INFORMATION_SCHEMA.ROUTINES  WHERE [ROUTINE_NAME] LIKE ''%name_of_proc%'''+';'
print @statement

EXEC sp_executesql @statement

FETCH NEXT FROM db_cursor INTO @dbname  
END  
CLOSE db_cursor  
DEALLOCATE db_cursor
0
Radagast_Brown

Sehr ordentlicher Trick Ich stolpere beim Versuch einer SQL-Injection. Im Objekt-Explorer im Suchfeld einfach die Prozentzeichen verwenden. Dies wird nach ALLEN gespeicherten Prozeduren, Funktionen, Ansichten, Tabellen, Schemas, Indizes usw. suchen :)

Suchmuster

0
Ernest Gunning