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
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%'
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.
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).
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.
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
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 :)