안녕하세요. SQLER의 코난 김대우입니다.
이번 강좌에서는, 7-3. 뷰 수정을 진행 하겠습니다.
SQLER에서 진행되는, 챗GPT와 함께 배우는 SQL Server 강좌 목록
이번에 진행할 강좌는 뷰(VIEW) 수정입니다.
TL;DR
ALTER 구문으로 뷰를 수정합니다. 데이터베이스 개체를 생성 또는 수정할 수 있는 CREATE OR ALTER 구문도 진행하고, 뷰 변경과 권한 문제를 살펴보겠습니다.
뷰 변경도 SQL Server의 개체 변경 구문인 ALTER를 이용합니다.
뷰를 수정하는 이유
뷰 수정보다 뷰 지우고 다시 만드는 게 더 빠르지 않나요?
제가 이전 강좌 예제에서 몇 번 뷰를 DROP 하고 다시 생성했습니다. 하지만, 주의하셔야 합니다. 뷰 또는 테이블에 대해 다양한 권한이 사용자에게 부여된 경우가 많습니다.
-- 뷰가 존재하면 삭제 IF OBJECT_ID(N'dbo.v_Employee', N'V') IS NOT NULL DROP VIEW dbo.v_Employee; GO -- 뷰 생성 CREATE VIEW v_Employee AS SELECT emp_num, emp_name, email FROM Employee; GO -- UserA USER 생성 CREATE USER UserA WITHOUT LOGIN; GO -- GRANT로 UserA에게 v_Employee 뷰 SELECT 권한 부여 GRANT SELECT ON dbo.v_Employee TO UserA; GO -- 현재 세션 사용자를 UserA로 설정 EXECUTE AS USER = N'UserA'; -- 현재 세션 사용자 체크 - UserA SELECT CURRENT_USER; GO -- 뷰 조회 - GRANT SELECT 되어서 가능 SELECT * FROM v_Employee; GO -- Employee 테이블 조회 - 불가 SELECT * FROM Employee; GO REVERT; -- 사용자를 다시 dbo로 되돌림 GO -- 현재 사용자 체크 - dbo SELECT CURRENT_USER;
이렇게 GRANT로 복잡하게 사용자 권한 설정이 완료된 테이블이나 뷰를 삭제하고 재생성하면 어떤 일이 생길까요? 예상 대로, GRANT로 부여한 권한 기록이 사라지면서 문제가 발생할 수 있습니다.
DROP 하고 빠르게 재생성하는 경우는, 저와 같이 SQLER에서 공부할 때만 수행하시고, 실제 업무에서는 ALTER를 사용하세요. ALTER는 뷰의 권한 및 여러 종속성을 그대로 유지하면서 뷰를 변경합니다.
ALTER 구문으로 뷰 변경
-- ALTER로 뷰 변경 ALTER VIEW v_Employee AS SELECT emp_num, emp_name, email FROM Employee; GO -- CREATE OR ALTER CREATE OR ALTER VIEW v_Employee AS SELECT emp_num, emp_name, email FROM Employee; GO
CREATE 대신 이렇게 ALTER를 이용하면 뷰를 변경할 수 있습니다. 또는 CREATE OR ALTER 구문으로 생성 또는 변경 설정도 가능합니다.
참고로, CREATE OR ALTER는 뷰, 저장 프로시저(Stored Procedure), 함수(Function), 트리거(Trigger) 등 데이터베이스 개체에서 사용 가능합니다.
SQL 강좌 책 구매
강좌가 도움이 되셨다면, 책으로 구매 가능합니다. 책 판매 수익금은 전액 코딩 교육 사회공헌 활동에 기부되며, 아래 링크에서 구매하시면 더 많은 금액이 기부됩니다.