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)),
문제가되는 대안으로 사용할 수 있습니다 .
F7저장 프로 시저 목록을 표시 하는 개체 탐색기 세부 정보 ( ) 에 있다고 가정 하고 필터 단추를 클릭하고 이름 (또는 일부 이름)을 입력합니다.
이것은 sproc뿐만 아니라 테이블과 뷰에서도 작동합니다.
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')
보시다시피 저장 프로 시저의 본문 내에서도 검색 할 수 있습니다.
저장 프로 시저 이름이 있고 어떤 데이터베이스에 속하는지 모를 때 다음을 사용합니다.
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%';