IT/SQL

MSSQL 프로시저 검색, 프로시저 내용 검색

아이앤휘 2024. 4. 7. 15:33

1. 프로시저 검색

MSSQL 에서 프로시저를 포함한 각종 OBJECT 를 가지고 있는 테이블은 SYSOBJECTS 이다.

아래에서 다루는 SYSCOMMENTS 를 포함해서 이전버전 부터 사용되던 테이블들은 대부분 이제는 시스템뷰를 사용하라고 MS 문서에서 안내되고 있는데, 아직( SQL 2022 버전까지 확인해봄 )은 쓸 수 있어서 계속 사용한다.

SELECT * FROM SYSOBJECTS WHERE XTYPE = 'P'

이렇게 쿼리하면 결과는 아래와 같다.

프로시저 검색쿼리 결과

 

결과에 보면 이름이 있고, CRDATE 가 있는데, CRDATE 는 생성일이다.

WHERE 절에 NAME 을 조건으로 추가하면 ( WHERE NAME LIKE '%PASS%' 이런식으로 ) 이름의 일부를 이용해서 찾을 수 있다.

 

생성일 말고, 마지막으로 수정한 날짜를 기준으로 찾고 싶으면 SELECT * FROM SYS.OBJECTS WHERE MODIFY_DATE >= '2022-10-10' 이런 식으로 SYS.OBJECTS 테이블을 이용해서 찾을 수 있다.

배포하기 전에  내가 개발서버에서 이번주에 수정한게 있나? 아니면, 내가 이번주에 뭔가 수정한것 같은데...? 이런 경우 및 나 몰래 누군가 배포한게 있나? 등등의 경우 활용할 수 있다.

 

2. 프로시저 내용 검색

프로시저의 내용은 SYSCOMMENTS 테이블에 들어가있다.

INFORMATION 테이블을 참조하는 프로시저를 찾고 싶을때는 아래와 같이 조회한다.

사실 정확하게는 테이블을 참조하는지를 찾는건 아니고 프로시저의 본문에 특정 단어가 들어가있는지를 찾는 것이다.

SELECT DISTINCT B.NAME, B.XTYPE 
FROM SYSCOMMENTS A
JOIN SYSOBJECTS B ON A.ID = B.ID
WHERE A.TEXT LIKE '%INFORMATION%'
ORDER BY B.XTYPE, B.NAME

결과는 아래과 같다.

프로시저 내용검색 쿼리 결과

 

여기에 마지막 수정일이나 생성일 등 다른 정보를 더 붙이려면 위에서 언급했던 테이블들을 추가로 참조하면 된다.

SYSBOJECTS, SYS.OBJECTS, SYSCOMMENTS, SYSCOLUMNS 등을 조합해서 쓰면 되는데, 대부분 ID 를 키로 사용해서 JOIN 하면 된다.

 

관련 MS 문서 : https://learn.microsoft.com/ko-kr/sql/relational-databases/system-compatibility-views/sys-sysobjects-transact-sql?view=sql-server-ver16

3. 프로시저 검색 및 내용검색 프로시저를 만들어서 단축키 지정하기

SSMS 는 단축키를 지정해서 사용할 수 있는데, 위의 두 개를 프로시저로 만들어서 단축키랑 연결해놓으면 좀 편하게 사용할 수 있다.

 

3.1 프로시저 및 테이블 찾는 프로시저

CREATE PROC F 
@TBL VARCHAR(100)
AS
SELECT NAME, XTYPE
FROM SYSOBJECTS 
WHERE NAME LIKE '%' + @TBL + '%'
	AND XTYPE IN ( 'P', 'FN', 'TF', 'V' ,'U' )
ORDER BY XTYPE, NAME

 

3.2 프로시저 내용검색 프로시저

CREATE PROC FF
@TXT VARCHAR(100)
AS
SELECT DISTINCT B.NAME, B.XTYPE 
FROM SYSCOMMENTS A
JOIN SYSOBJECTS B ON A.ID = B.ID
WHERE A.TEXT LIKE '%'+@TXT+'%'
ORDER BY B.XTYPE, B.NAME

 

3.3 단축키 지정

메뉴 > 도구 > 옵션 > 환경 > 키보드 > 쿼리바로가기

mssql 단축키 설정 화면

위와 같이 지정하고, 아래와 같이 특정한 단어를 블럭으로 선택한 후에 컨트롤 + 4 또는 컨트롤 + 5를 누른다.

 

Ctrl + 4 결과