Czy istnieje sposób, aby znaleźć procedurę składowaną w SQL Server Management Studio według nazwy lub części nazwy? (w kontekście aktywnej bazy danych)
Dzięki za pomoc
Odpowiedzi:
Możesz użyć:
select *
from
sys.procedures
where
name like '%name_of_proc%'
jeśli potrzebujesz kodu, możesz zajrzeć do tabeli syscomments
select text
from
syscomments c
inner join sys.procedures p on p.object_id = c.object_id
where
p.name like '%name_of_proc%'
Edytuj aktualizację:
można również użyć standardowej wersji ansi
SELECT *
FROM
INFORMATION_SCHEMA.ROUTINES
WHERE
ROUTINE_NAME LIKE '%name_of_proc%'
inner join sys.procedures p on p.object_id = c.id
zamiast tego
object_definition(object_id(r.ROUTINE_NAME)),
jako alternatywy to jest problem.
Zakładając, że znajdujesz się w Detale eksploratora obiektów ( F7) pokazującym listę procedur składowanych, kliknij przycisk Filtry i wprowadź nazwę (lub nazwę częściową).
Będzie to działać również dla tabel i widoków (między innymi), a nie tylko dla sproców:
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
Podaje również nazwę schematu, która będzie przydatna w każdej nietrywialnej bazie danych (np. Takiej, w której potrzebujesz zapytania, aby znaleźć procedurę składowaną według nazwy).
Możesz użyć tego zapytania:
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')
Jak widać, możesz również przeszukiwać treść procedury składowanej.
Bardzo fajna sztuczka, na którą natknąłem się, próbując wstrzyknąć SQL, w eksploratorze obiektów w polu wyszukiwania po prostu użyj swoich znaków procentowych, a to przeszuka WSZYSTKO procedury składowane, funkcje, widoki, tabele, schematy, indeksy ... Mam dość myślenia o więcej :)
Kiedy mam nazwę procedury sklepu i nie wiem, do której bazy danych ona należy, używam następującego -
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
W przypadku programu SQL Server w wersji 9.0 (2005) można użyć poniższego kodu:
select *
from
syscomments c
inner join sys.procedures p on p.object_id = c.id
where
p.name like '%usp_ConnectionsCount%';
Opcja 1: W SSMS przejdź do View > Object Explorer Details
lub naciśnij F7. Użyj Search
pudełka. Na koniec na wyświetlonej liście kliknij prawym przyciskiem myszy i wybierz, Synchronize
aby znaleźć obiekt w Object Explorer
drzewie.
Opcja 2: Zainstaluj dodatek podobny do dbForge Search
. Kliknij prawym przyciskiem myszy wyświetloną listę i wybierz Find in Object Explorer
.