안녕하세요. SQLER의 코난 김대우입니다. 
이번 강좌에서는, 8-6. 저장 프로시저 - 종속성(Dependency) 확인을 진행 하겠습니다.


SQLER에서 진행되는, 챗GPT와 함께 배우는 SQL Server 강좌 목록

 

이번에 진행할 강좌는 저장 프로시저 종속성 확인입니다.

 

 

 

TL;DR

저장 프로시저 내에서 다른 저장 프로시저를 호출할 수 있지만, 종속성에 주의해야 합니다. SQL Server에서 개체 종속성을 확인하는 방법을 설명하며, 이름 변경이나 삭제 시 주의 사항을 강좌로 제공합니다.

 


저장 프로시저에서 다른 저장 프로시저를 호출할 수 있나요?

가능합니다. SQL Server의 데이터베이스 개체들은 종속되는 개체들을 서로 참조하고 참조받습니다. 저장 프로시저 안에서 다른 저장 프로시저를 실행하는 것은 가능하지만, 종속성에 주의해야 합니다. 예제를 통해 살펴보겠습니다.

 

USE AdventureWorks;
GO

-- 저장 프로시저 생성
CREATE OR ALTER PROC pEmployeeInfo
@emp_num INT
AS
SELECT emp_num, emp_name, email FROM Employee
WHERE emp_num = @emp_num;
GO

-- 실행
EXEC pEmployeeInfo 3;

-- 저장 프로시저 안에서 다른 저장 프로시저를 실행
CREATE OR ALTER PROC pEmployeeInfo2
@emp_num INT
AS
EXEC pEmployeeInfo @emp_num;
GO

-- 실행
EXEC pEmployeeInfo2 3;

-- pEmployeeInfo2가 참조하는 저장 프로시저 pEmployeeInfo 이름 변경
EXEC sp_rename 'dbo.pEmployeeInfo', 'dummyproc';
GO

-- 실행하면 오류 발생
EXEC pEmployeeInfo2 3;

메시지 2812, 수준 16, 상태 62, 프로시저 pEmployeeInfo2, 줄 6 [배치 시작 줄 22]
Could not find stored procedure 'pEmployeeInfo'.

 

이렇게 pEmployeeInfo2 저장 프로시저는 내부에서 pEmployeeInfo를 실행합니다. 즉, 참조하는 관계입니다. 만약, pEmployeeInfo2가 참조하는 pEmployeeInfo 프로시저 이름을 변경하면 위와 같은 오류가 발생할 수 있으므로 주의하세요.

 

 

저장 프로시저 종속성 확인

이런 종속성 이슈를 방지하기 위해, 이름 변경이나 삭제 작업 전, 종속성을 확인하는 게 좋습니다. 저장 프로시저뿐만 아니라 대부분의 데이터베이스 개체에서도 체크할 수 있습니다.

 

-- Referencing 종속성 확인
-- dbo.pEmployeeInfo 저장 프로시저를 참조하는 종속된 개체를 확인
SELECT referencing_schema_name, referencing_entity_name, referencing_id, referencing_class_desc, is_caller_dependent  
FROM sys.dm_sql_referencing_entities ('dbo.pEmployeeInfo', 'OBJECT');   
GO  

-- Referenced 종속성 확인
-- dbo.pEmployeeInfo가 참조하는 종속된 개체 확인 - 현재 없음.
SELECT referenced_schema_name, referenced_entity_name, referenced_minor_name,referenced_minor_id, referenced_class_desc, is_caller_dependent, is_ambiguous  
FROM sys.dm_sql_referenced_entities ('dbo.pEmployeeInfo', 'OBJECT');  
GO

 

수행하면, 개체 종속성을 확인할 수 있으며, 삭제나 이름 변경 시 주의해야 합니다.

 

 

지연된 이름 확인(Deferred Name Resolution)

그렇다면, 아직 존재하지 않는 저장 프로시저를 참조하는 프로시저는 생성 가능할까요?

 

-- 아직 존재하지 않는 프로시저를 참조하는 프로시저 생성
CREATE OR ALTER PROC pEmployeeInfo3
@emp_num INT
AS
EXEC pEmployeeInfoABC @emp_num;
GO

The module 'pEmployeeInfo3' depends on the missing object 'pEmployeeInfoABC'. 
The module will still be created; however, it cannot run successfully until the object exists.

 

이렇게 프로시저는 생성됩니다. 하지만, “종속된 개체가 없어 실행할 수 없다”는 경고를 표시합니다. 이후 종속 개체를 생성하면 정상적으로 실행됩니다. 이를 “지연된 이름 확인”이라고 부르며, 여러 개의 종속된 저장 프로시저나 데이터베이스 개체를 생성할 때 발생 가능한 경고입니다.


간략히, 데이터베이스를 스크립트로 이전하는 작업을 할 때, 개체가 생성되면서 이런 경고가 발생해도 무시하시고, 계속 개체 생성을 하시면 됩니다.
 

 

SQL 강좌 책 구매

강좌가 도움이 되셨다면, 책으로 구매 가능합니다. 책 판매 수익금은 전액 코딩 교육 사회공헌 활동에 기부되며, 아래 링크에서 구매하시면 더 많은 금액이 기부됩니다. 

 

책구매 링크: 챗GPT와 함께하는 마이크로소프트 SQL Server 2022 

책구매링크.png

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 21507
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 12229
2294 SQL강좌: 12-1. 인덱스 생성과 관리 - 인덱스(Index) 소개 file 코난(김대우) 2023.08.18 60
2293 SQL강좌: 11-8. 관계형 데이터베이스 이해 - 데이터베이스 구현 코난(김대우) 2023.08.18 24
2292 SQL강좌: 11-7. 관계형 데이터베이스 이해 - 데이터베이스 물리적 설계 코난(김대우) 2023.08.18 23
2291 SQL강좌: 11-6. 관계형 데이터베이스 이해 - 데이터베이스 논리적 설계 코난(김대우) 2023.08.18 23
2290 SQL강좌: 11-5. 관계형 데이터베이스 이해 - 데이터베이스 설계 요구사항(Requirements) 분석과 개념적 설계 코난(김대우) 2023.08.18 19
2289 SQL강좌: 11-4. 관계형 데이터베이스 이해 - 데이터베이스 설계 목표와 고려사항 코난(김대우) 2023.08.18 16
2288 SQL강좌: 11-3. 관계형 데이터베이스 이해 - 데이터베이스 설계 단계 file 코난(김대우) 2023.08.18 19
2287 SQL강좌: 11-2. 관계형 데이터베이스 이해 - 데이터베이스 생명주기 file 코난(김대우) 2023.08.18 23
2286 SQL강좌: 11-1. 관계형 데이터베이스 이해 - 관계형 모델 코난(김대우) 2023.08.18 33
2285 SQL강좌: 10-4. T-SQL 프로그래밍 - 공통 테이블 식(CTE-Common Table Expression) 코난(김대우) 2023.08.18 47
2284 SQL강좌: 10-3. T-SQL 프로그래밍 - 변수, 조건문(IF-ELSE), 반복문(WHILE), CASE 표현식 코난(김대우) 2023.08.18 26
2283 SQL강좌: 10-2. T-SQL 프로그래밍 - 일괄처리(Batch) 코난(김대우) 2023.08.18 31
2282 SQL강좌: 10-1. T-SQL 프로그래밍 - 소개 코난(김대우) 2023.08.18 19
2281 SQL강좌: 9-3. 커서 - 현업에서 커서 사용 및 주의사항 코난(김대우) 2023.08.18 49
2280 SQL강좌: 9-2. 커서 - 커서 구문 코난(김대우) 2023.08.18 23
2279 SQL강좌: 9-1. 커서(CURSOR) - 커서 소개 코난(김대우) 2023.08.18 40
2278 SQL강좌: 8-7. 저장 프로시저 - 프로시저 캐시와 RECOMPILE 코난(김대우) 2023.08.18 40
» SQL강좌: 8-6. 저장 프로시저 - 종속성(Dependency) 확인 코난(김대우) 2023.08.18 42
2276 SQL강좌: 8-5. 저장 프로시저 - OUTPUT 파라미터 코난(김대우) 2023.08.18 43
2275 SQL강좌: 8-4. 저장 프로시저 - 동적 SQL(Dynamic SQL)과 SQL 주입(Injection) 공격 코난(김대우) 2023.08.18 54





XE Login