본문 바로가기

DBMS/SQL Server

[SQL Server] 특정 문자열이 포함된 프로시저 찾기

 

다른 팀에서 자신들의 프로시저를 우리쪽 프로시저 안에서 호출하는지 확인 요청이 왔다.

그 많은 프로시저를 일일이 까보면서 다른 팀의 프로시저를 확인해야 할까...

프로시저 안에서의 프로시저명은 문자열로 취급되고, 아래의 쿼리로 찾을 수 있다.

 

 SELECT ROUTINE_NAME

 FROM INFORMATION_SCHEMA.ROUTINES

 WHERE ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_DEFINITION LIKE '%문자열%'

 ORDER BY ROUTINE_NAME

 

 SELECT A.NAME

 FROM dbo.SYSOBJECTS AS A

 INNER JOIN dbo.SYSCOMMENTS AS B

 ON A.ID = B.ID

 WHERE A.TYPE = 'P' AND B.TEXT LIKE '%문자열%'

 ORDER BY A.NAME

 

위의 두가지 방법이 있는데,

첫번째 방법은 VARCHAR(4000) 이상의 크기를 가진 프로시저는 찾아내지 못한다.

두번째 방법은 프로시저 안에 같은 단어가 있을경우 결과가 여러번 나온다.

 

 

AB라는 문자열을 포함한 프로시저를 찾아보면 결과는 다음과 같다. 

두번째 방법을 살펴보면 같은 이름의 프로시저가 중복으로 검색된 것을 확인할 수 있다.

 

 

 

성능을 비교해보면 다음과 같다.

 

 

실행계획을 보면 첫번째 방법의 성능이 월등히 좋은 것을 확인할 수 있다.