저장 프로시저 내용 검색하기

가끔 저장 프로시저 이름이 안떠오르거나 다수의 SP의 내용을 일괄적으로 바꾸거나 할 필요가 있을 경우가 있습니다. 저장 프로시저를 일일이 열어봐서 찾으려고 하니 숨이 턱막힙니다.


그럴 때 유용한 저장프로시저 내용 검색쿼리를 소개합니다.

잘못된 방식

SELECT *
FROM INFORMATION_SCHEMA.ROUTINES
 WHERE ROUTINE_DEFINITION LIKE '%찾을 내용%'
 AND ROUTINE_TYPE='PROCEDURE'

…포스트 작성하기 전까지는 위 쿼리를 사용했었습니다만 찾다보니 문제를 발견하였습니다.
ROUTINE_DEFINITION이 nvarchar(4000)으로 문자열을 변환하여 내려주기 때문에 매우 긴 내용의 경우 검색에 문제가 있다고 합니다.

다음 스크립트는 올바른 결과를 제공합니다.

SELECT OBJECT_NAME(object_id), 
 OBJECT_DEFINITION(object_id)
FROM sys.procedures
WHERE OBJECT_DEFINITION(object_id) LIKE '%찾을 내용%'

참고

StackOverflow
sqlHints.com