분할된 뷰에서 데이터 수정
분할된 뷰를 업데이트할 수 없는 경우 이 뷰는 원본 테이블의 읽기 전용 복사본으로만 작동합니다. 업데이트할 수 있는 분할된 뷰는 원본 테이블의 모든 기능을 갖습니다.
뷰가 UNION ALL 문을 사용하여 개별 결과 집합이 하나로 조합되는 SELECT 문의 집합인 경우 업데이트할 수 없는 분할된 뷰로 간주됩니다. 각 SELECT 문은 하나의 SQL Server 기본 테이블을 참조합니다. 테이블은 로컬 테이블이거나 네 부분으로 된 이름, OPENROWSET 함수 또는 OPENDATASOURCE 함수를 사용하여 참조하는 연결된 테이블이 될 수 있습니다. OPENDATASOURCE 또는 통과 쿼리를 지정하는 OPENROWSET 함수는 사용할 수 없습니다.
또한 뷰를 참조하는 데이터 수정 문은 INSERT, UPDATE 및 DELETE 문에 정의된 규칙을 따라야 합니다.
[!참고]
분할된 뷰로 대량 가져오기 작업은 bcp 명령, BULK INSERT 문 또는 INSERT ... SELECT * FROM OPENROWSET(BULK...) 문에 의해 지원되지 않습니다. 그러나 INSERT 문을 사용하여 분할된 뷰에 여러 행을 삽입할 수 있습니다.
분할된 뷰가 서버에 분산되어 있는 경우 기본 테이블에 트리거 또는 연계 작업을 사용하지 마십시오. 트리거 또는 연계 작업을 통해 뷰 정의에 영향을 미칠 수 있는 기본 데이터를 변경할 수 있습니다.
사용자에게 뷰의 기반이 되는 각 테이블에 대한 CONTROL, ALTER, TAKE OWNERSHIP 또는 VIEW DEFINITION 권한이 있는 경우에만 분산형 분할 뷰를 업데이트할 수 있습니다. 자세한 내용은 분산형 분할 뷰의 메타데이터 표시 문제 해결을 참조하십시오.
[!참고]
SQL Server 2008 Enterprise 또는 SQL Server 2008 Developer을 설치한 경우에만 분산형 분할 뷰를 통해 데이터를 수정할 수 있습니다. 그러나 SQL Server 2008 버전에서는 로컬 분할된 뷰를 통해 데이터를 수정할 수 있습니다.
INSERT 문
INSERT 문은 분할된 뷰를 통해 멤버 테이블에 데이터를 추가합니다. INSERT 문은 다음 규칙을 따라야 합니다.
열이 기본 테이블에서 NULL 값을 갖거나 기본 테이블에 DEFAULT 제약 조건이 정의된 경우에도 모든 열이 INSERT 문에 포함되어야 합니다.
INSERT 문의 VALUES 절에 DEFAULT 키워드를 지정할 수 없습니다.
INSERT 문은 멤버 테이블 중 하나의 분할 열에 정의된 CHECK 제약 조건의 논리에 부합하는 값을 제공해야 합니다.
멤버 테이블에 ID 속성을 갖는 열이 있으면 INSERT 문이 허용되지 않습니다.
멤버 테이블에 timestamp 열이 있으면 INSERT 문이 허용되지 않습니다.
동일한 뷰 또는 멤버 테이블 중 하나에 자체 조인이 있으면 INSERT 문이 허용되지 않습니다.
UPDATE 문
UPDATE 문은 분할된 뷰를 통해 하나 이상의 멤버 테이블에 있는 데이터를 수정합니다. UPDATE 문은 다음 규칙을 따라야 합니다.
해당하는 멤버 테이블에 정의된 DEFAULT 값이 열에 포함되어도 UPDATE 문은 SET 절에서 DEFAULT 키워드를 값으로 지정할 수 없습니다.
ID 속성이 있는 열의 값은 변경할 수 없지만, 이외에 다른 열은 업데이트할 수 있습니다.
열에 text, image 또는 ntext 데이터가 있으면 PRIMARY KEY의 값을 변경할 수 없습니다.
기본 테이블에 timestamp 열이 있으면 업데이트가 허용되지 않습니다.
동일한 뷰 또는 멤버 테이블 중 하나에 자체 조인이 있으면 업데이트가 허용되지 않습니다.
DELETE 문
DELETE 문은 분할된 뷰를 통해 하나 이상의 멤버 테이블에 있는 데이터를 제거합니다. 동일한 뷰 또는 멤버 테이블 중 하나에 자체 조인이 있으면 DELETE 문이 허용되지 않습니다.