다른 팀에서 자신들의 프로시저를 우리쪽 프로시저 안에서 호출하는지 확인 요청이 왔다.
그 많은 프로시저를 일일이 까보면서 다른 팀의 프로시저를 확인해야 할까...
프로시저 안에서의 프로시저명은 문자열로 취급되고, 아래의 쿼리로 찾을 수 있다.
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라는 문자열을 포함한 프로시저를 찾아보면 결과는 다음과 같다.
두번째 방법을 살펴보면 같은 이름의 프로시저가 중복으로 검색된 것을 확인할 수 있다.
성능을 비교해보면 다음과 같다.
실행계획을 보면 첫번째 방법의 성능이 월등히 좋은 것을 확인할 수 있다.
'DBMS > SQL Server' 카테고리의 다른 글
[SQL Server] TOP 절에 변수 사용하기 (0) | 2014.02.04 |
---|---|
[SQL Server] SET NOCOUNT ON (0) | 2014.02.03 |
[SQL Server] 로그 파일 크기 축소하기 (0) | 2013.12.24 |
[SQL Server] MDF, LDF 파일을 이용한 데이터베이스 복구 (0) | 2013.12.19 |
[SQL Server] COUNT(*) vs COUNT(컬럼) (0) | 2013.10.11 |