Gibt es eine Möglichkeit, die gespeicherte Prozedur in SQL Server Management Studio nach Namen oder nach Teilen des Namens zu finden? (im aktiven Datenbankkontext)
Danke für die Hilfe
Antworten:
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 nachsehen
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%'
inner join sys.procedures p on p.object_id = c.id
stattdessen tun
object_definition(object_id(r.ROUTINE_NAME)),
alternativ das Problem verwenden.
Angenommen, Sie befinden sich im Objekt-Explorer Details ( F7), in dem die Liste der gespeicherten Prozeduren angezeigt wird, klicken Sie auf die Schaltfläche Filter und geben Sie den Namen (oder den Teilnamen) ein.
Dies funktioniert (unter anderem) auch für Tabellen und Ansichten, nicht nur für Sprocs:
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
Außerdem erhalten Sie den Schemanamen, der in jeder nicht trivialen Datenbank nützlich ist (z. B. in einer Datenbank, in der Sie eine Abfrage benötigen, um eine gespeicherte Prozedur nach Namen 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, können Sie auch im Hauptteil der gespeicherten Prozedur suchen.
Sehr ordentlicher Trick Ich stolpere über eine SQL-Injection. Verwenden Sie im Objekt-Explorer im Suchfeld nur Ihre Prozentzeichen. Dadurch werden ALLE gespeicherten Prozeduren, Funktionen, Ansichten, Tabellen, Schemata, Indizes durchsucht. Ich habe es satt, an mehr zu denken :) :)
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 ['+@dbname+'].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
Für SQL Server Version 9.0 (2005) können Sie den folgenden Code verwenden:
select *
from
syscomments c
inner join sys.procedures p on p.object_id = c.id
where
p.name like '%usp_ConnectionsCount%';
Option 1: Gehen Sie in SSMS zu View > Object Explorer Details
oder drücken Sie F7. Verwenden Sie die Search
Box. Klicken Sie schließlich in der angezeigten Liste mit der rechten Maustaste und wählen Sie Synchronize
, um das Objekt im Object Explorer
Baum zu finden.
Option 2: Installieren Sie ein Add-On wie dbForge Search
. Klicken Sie mit der rechten Maustaste auf die angezeigte Liste und wählen Sie Find in Object Explorer
.