이름으로 저장 프로 시저 찾기


84

SQL Server Management Studio 저장 프로 시저에서 이름 또는 이름의 일부로 찾을 수있는 방법이 있습니까? (활성 데이터베이스 컨텍스트에서)

도와 주셔서 감사합니다

답변:


142

당신이 사용할 수있는:

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%'

1
당신이 이름으로 SP의 텍스트를 얻고 싶은 경우에, 그것은 사용 "하여 sp_helptext의 SPNAME"와 쉽게
해리 Sarshogh

2
는 SQL 2012,해야 할 일을했을 inner join sys.procedures p on p.object_id = c.id대신
user5226582

1
SQL Server의 경우 ANSI 표준 버전은 8k에서 ROUTINE_DEFINITION을 차단합니다. object_definition(object_id(r.ROUTINE_NAME)),문제가되는 대안으로 사용할 수 있습니다 .
Mark Schultheiss

절차가 어디에 있는지 확실하지 않은 경우 카탈로그 (데이터베이스) 및 스키마를 반환하는 ANSI 표준 버전의 경우 +1. (예를 들어 쉽게 찾을 수없는 프로 시저를 참조하는 에이전트 작업을 찾았습니다. ANSI 표준 쿼리가이 문제를 해결했습니다.)
youcantryreachingme

42

F7저장 프로 시저 목록을 표시 하는 개체 탐색기 세부 정보 ( ) 에 있다고 가정 하고 필터 단추를 클릭하고 이름 (또는 일부 이름)을 입력합니다.

대체 텍스트


2
필터에 대해 몰랐던 것에 대해 정말 감사합니다. 어떻게 든 그 버튼을 본 적이 없습니다.
Chad Portman

5

이것은 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

또한 중요하지 않은 데이터베이스 (예 : 이름으로 저장 프로 시저를 찾기 위해 쿼리가 필요한 데이터베이스)에서 유용한 스키마 이름을 제공합니다.


1
SQL 2005에서 2016으로 레거시 앱을 마이그레이션하면 내 스크립트에 '@errorMessage'근처에 잘못된 구문이 표시되어별로 도움이되지 않았습니다. SSSM에서 동일한 sql을 실행했을 때 "in procedure 'some_name'"이 추가되었는데 이러한 저장 프로시 저는 어디에도 없었습니다! 그것이 트리거라는 것이 밝혀졌고 귀하의 쿼리가 그것을 찾았습니다. 감사!
MickeyfAgain_BeforeExitOfSO

1

다음 쿼리를 사용할 수 있습니다.

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')

보시다시피 저장 프로 시저의 본문 내에서도 검색 할 수 있습니다.


0

검색 상자의 개체 탐색기에서 백분율 문자 만 사용하면 SQL 주입을 시도하는 매우 깔끔한 트릭이 있습니다. 그러면 모든 저장 프로 시저, 함수, 뷰, 테이블, 스키마, 인덱스를 검색합니다. :)

검색 패턴


0

저장 프로 시저 이름이 있고 어떤 데이터베이스에 속하는지 모를 때 다음을 사용합니다.

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

0

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%';

0

옵션 1 : SSMS에서로 이동 View > Object Explorer Details하거나 F7을 누릅니다. Search상자를 사용하십시오 . 마지막으로 표시된 목록에서 마우스 오른쪽 버튼을 클릭하고 선택 Synchronize하여 Object Explorer트리 에서 개체를 찾습니다 .

개체 탐색기 세부 정보

옵션 2 : 같은 애드온을 설치합니다 dbForge Search. 표시된 목록을 마우스 오른쪽 버튼으로 클릭하고을 선택 Find in Object Explorer합니다.

여기에 이미지 설명 입력

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.