2019년 10월 22일 화요일

[SQL Server] Overview Function Definition

다른 언어도 마찬가지 겠지만 수정을 하면 영향 받는 범위를 확인해야 한다.
처음부터 설계를 잘하면 되지... 만 말처럼 쉽지 않다. 

그래서 프로시저나 테이블을 수정할 때 참조하는 정보를 확인한다. 그런데 지금까지 내가 사용하던 것은 프로시저 내에서만 찾는 쿼리를 사용했다. 잘 사용하고 있었는데 이건 프로시저한정적이라서 이번에 함수내용도 확인할 수 있는 쿼리를 조사해봤다.

참고링크

SELECT o.name as FuncName, sm.definition as Def, O.object_id
FROM sys.objects as o INNER JOIN sys.sql_modules as sm
    ON o.object_id = sm.object_id
WHERE o.type IN ('FN''IF''TF'

sys.sql_modules에서 함수의 내용을 가지고 있어서 그 부분을 활용한 것이다.
where 절에 type은 FN = SQL 스칼라 함수, IF = SQL 인라인 테이블 반환 함수, TF = SQL 테이블 반환 함수를 의미한다.

그러면 특정 개체를 참조하는 지는 어떻게 바꿀 수 있을까

SELECT o.name as FuncName
FROM sys.objects as o INNER JOIN sys.sql_modules as sm
    ON o.object_id = sm.object_id
WHERE o.type IN ('FN''IF''TF') AND sm.definition LIKE N'%검색어%'

간략하게 리스트만 출력하면 이렇게 할 수 있다. 

이렇게 오늘도 새로운 것을 배웠다.




댓글 없음:

댓글 쓰기