본문 바로가기

SQL/MS-SQL

뷰 생성

뷰의 생성 구문은 아래와 같습니다.

 

CREATE VIEW [ < database_name > . ] [ < owner > . ] view_name [ ( column [ ,...n ] ) ]
[ WITH < view_attribute > [ ,...n ] ]
AS
select_statement
[ WITH CHECK OPTION ]

< view_attribute > ::=
     { ENCRYPTION | SCHEMABINDING | VIEW_METADATA }

 

전혀 재미 없지요? ^_^

찬찬히 샘플로 알아보실거니 물론 걱정 안하시겠져? ^_^

 

USE pubs
GO

CREATE VIEW titles_view
AS
SELECT title, type, price, pubdate
FROM titles
GO

--뷰에서 정보 조회
SELECT * FROM titles_view

 

간단한 뷰의 생성 샘플 입니다.

 

뷰의 생성 구문을 보실 수 있습니다. ^_^

시스템 저장 프로시져로 특정 개체의 생성 구문을 조회하는 것이 있었지요? ^_^

 

sp_helptext titles_view

 

자 위처럼 해 보시문???

뷰 생성 구문이 보일 겁니다. ^_^

만약 정보를 숨기기 위한 뷰라면? 조심 하셔야 겠지요?

보안상의 문제가 있을 뷰를 생성 하실 경우는

뷰에대한 암호화 옵션을 주셔서 뷰 생성 구문을 숨기실 수 있습니다.

 

USE pubs
GO

--속성으로 price * royalty * ytd_sales 값을 amt_due
--로 줄 수 있다.
CREATE VIEW accounts (title, advance, amt_due)
WITH ENCRYPTION
AS
SELECT title, advance, price * royalty * ytd_sales
FROM titles
WHERE price > $5
GO

--뷰를 생성후 암호화된 뷰의 생성구문을 보려 하면?
sp_helptext accounts

 

"개체 주석을 암호화했습니다.  "

라는 메세지와 함께 뷰 생성 구문을 보실 수 없으실 겁니다.

이때는 반드시 생성하신분이 뷰 생성 스크립트를 백업을 안전한 곳에 해 두셔야 겠지요?

 

다음은 Check 옵션 입니다.

 

USE pubs
GO

CREATE VIEW CAonly
AS
SELECT au_lname, au_fname, city, state
FROM authors
WHERE state = 'CA'
GO

 

이런 경우를 생각해 봅시다.

위의 뷰는 뷰의 정의대로 state가 'CA'인 사람의 정보만 나타날듯 하지요?

네. 맞습니다. 그런데...

만약 state가 'CA'인 사람의 데이터를 수정해서 'OR'이라는 곳에 거주하게 한다면?

이게 가능할까요???

 

SELECT * FROM CAonly

--잠시후 말할 뷰의 수정이다.
--뷰에대한 수정은 분명 가능하다.
--여기선 이 WHERE state = 'CA' 로
--'CA'에서 사는 사람만 보는 것인데..
--이에 대해서 수정을 가해 OR로 바꾸는 것이다.
--질의가 될지 안될지 먼저 생각해 보자.


UPDATE CAonly SET state = 'OR' WHERE au_lname = 'White'

 

답을 보셨나요? ^_^ 넵!!!  수정 됩니다.!!!!!

이런 황당할데가!!!!

그럼 어떻게 이런 수정 작업이 불가하게 해야 할까요!!!!

이럴때 사용하는것이 바로 WITH CHECK OPTION 입니다.

 

USE pubs
--인포메이션 정보 뷰에서 해당 뷰 이름이 존재하면?
--지워라 라는 구문 이다.
IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_NAME = 'CAonly')
DROP VIEW CAonly
GO

--뷰 생성
CREATE VIEW CAonly
AS
SELECT au_lname, au_fname, city, state
FROM authors
WHERE state = 'CA'
--체크 옵션을 사용한다.
WITH CHECK OPTION
GO

--CA를 OR로 변화 시키려 하면?
UPDATE CAonly SET state = 'OR' WHERE au_lname = 'Carson'

 

WITH CHECK OPTION이 걸려 있어서 수정이 불가하다는 메세지를 볼 것이다.

 

다른 뷰 생성의 옵션들은 찬찬히 설명을 드리지요. ^_^

 

아울러 뷰에 대한 정보를 보고 싶으시면???

엔터프라이즈 관리자 에서는

DB선택 -> 뷰 선택 -> 해당 뷰 선택후 등록정보 하면?

뷰에대한 정보를 보실 수 있으며...

질의 분석기에서 정보를 보시려면?

 

sp_help CAonly

 

이렇게 뷰에 대한 정보를 보실 수 있습니다.

 

다음은 뷰 수정에 대해서 보시지요. ^_^


코난님의 SQL SERVER2000 강좌입니다.(SQLER.PE.KR )