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
sql
database
sql-server-2005
ssms
gruber
źródło
źródło
inner join sys.procedures p on p.object_id = c.id
zamiast tegoobject_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ą).
źródło
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).
źródło
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.
źródło
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 :)
Wzorzec wyszukiwania
źródło
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
źródło
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%';
źródło
Opcja 1: W SSMS przejdź do
View > Object Explorer Details
lub naciśnij F7. UżyjSearch
pudełka. Na koniec na wyświetlonej liście kliknij prawym przyciskiem myszy i wybierz,Synchronize
aby znaleźć obiekt wObject Explorer
drzewie.Opcja 2: Zainstaluj dodatek podobny do
dbForge Search
. Kliknij prawym przyciskiem myszy wyświetloną listę i wybierzFind in Object Explorer
.źródło