ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [MSSQL] 특정 테이블을 포함하는 SP, 함수 찾기, SP, 함수의 내용 검색
    개발(프로그래밍)/SQL(RDBMS) 2020. 4. 7. 22:29

    대부분 개발 히스토리 전체를 알지 못한 상태에서

    특정 기능 개발을 요청받는다.

     

    이런 기능은 이미 개발되어 있을 것 같은데....

    혹은 이 테이블은 어떻게 써야할까... 참고할만한 로직 없을까 싶을 때 

    특정 테이블을 참조하는 SP, 함수를 찾아보게 된다.

    1
    2
    3
    4
    5
    select   so.name
    from     dbo.syscomments sc with(nolock)
    inner join dbo.sysobjects so with(nolock) on sc.id = so.id
    where     so.xtype in ('p''fn'-- xtype --> p : 저장프로시저, fn : 스칼라함수 
    and        sc.text like '%tbl_sample%'-- 내가 찾고자 하는 검색어(테이블 이름 등)

    * SP와 함수는 다음과 같이 정의되어 있다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    create procedure dbo.sp_sample
    as
    begin
        select  ts.*
        from    dbo.tbl_sample ts 
    end
     
    create function dbo.fn_sample()
    returns int
    as
    begin
        declare @result int
     
        select  @result = count(1)
        from    dbo.tbl_sample ts 
     
        return @result
    end

     

    원리는 간단하다.

    syscomments 라는 시스템 테이블의 text 컬럼에 

    SP, 함수의 작성 스크립트가 저장되어 있다.

    이 컬럼을 like 구문으로 검색하면 된다.

    굳이 테이블 이름이 아니어도 어떤 텍스트든 검색 가능하다는 의미다.

     

    그리고 sysobjects라는 시스템 테이블의 xtype 컬럼에

    각 object의 종류가 관리된다.

    p는 프로시져이고, fn은 스칼라 함수다.

     

    자세한 정보는 MS 공식 레퍼런스를 참조하자.

    https://docs.microsoft.com/ko-kr/sql/relational-databases/system-compatibility-views/sys-sysobjects-transact-sql?view=sql-server-ver15

Designed by Tistory.