6 ответов:
вы можете использовать:
select * from sys.procedures where name like '%name_of_proc%'Если вам нужен код, который вы можете посмотреть в таблице 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%'Изменения:
вы можете также использовать стандартную версию ansi
SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME LIKE '%name_of_proc%'
предполагая, что вы находитесь в деталях обозревателя объектов (F7) показывает список хранимых процедур, нажмите кнопку фильтр и введите имя (или часть имени).
Это будет работать для таблиц и представлений (среди прочего), а не только хранимые процедуры:
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Он также дает вам имя схемы, которое будет полезно в любой нетривиальной базе данных (например, там, где вам нужен запрос, чтобы найти хранимую процедуру по имени).
вы можете использовать этот запрос:
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')Как вы можете видеть, вы также можете выполнять поиск внутри тела хранимой процедуры.
очень аккуратный трюк я натыкаюсь на некоторые SQL-инъекции, в обозревателе объектов в поле поиска просто используйте свои процентные символы, и это будет искать все хранимые процедуры, функции, представления, таблицы, схемы, индексы...Я устал думать о большем:)
когда у меня есть имя процедуры хранилища и я не знаю, к какой базе данных она принадлежит, я использую следующее -
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

Comments