Чи можу я якось знайти в SQL Server Management Studio збережену процедуру за іменем або за частиною імені? (щодо активного контексту бази даних)
Дякую за допомогу
Відповіді:
Ви можете використовувати:
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%'
inner join sys.procedures p on p.object_id = c.id
замість цього
object_definition(object_id(r.ROUTINE_NAME)),
як альтернативу проблему.
Якщо припустити, що ви знаходитесь в Object Explorer Details ( F7), де відображається список збережених процедур, натисніть кнопку Фільтри та введіть ім’я (або часткове ім’я).
Це також буде працювати для таблиць та подань (серед іншого), а не тільки 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
Він також надає вам назву схеми, яка буде корисною в будь-якій нетривіальній базі даних (наприклад, у такій, де вам потрібен запит, щоб знайти збережену процедуру за іменем).
Ви можете використовувати цей запит:
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
Для SQL Server версії 9.0 (2005) ви можете використовувати наведений нижче код:
select *
from
syscomments c
inner join sys.procedures p on p.object_id = c.id
where
p.name like '%usp_ConnectionsCount%';
Варіант 1: У SSMS перейдіть View > Object Explorer Details
або натисніть F7. Використовуйте Search
коробку. Нарешті, у відображеному списку клацніть правою кнопкою миші та виберіть, Synchronize
щоб знайти об'єкт у Object Explorer
дереві.
Варіант 2: Встановіть додатковий лайк dbForge Search
. Клацніть правою кнопкою миші на відображеному списку та виберіть Find in Object Explorer
.